2014-09-19 4 views
-1
#include <iostream> 
using namespace std; 

class Book 
{ 
public: 
Book(const string& ISBN,const string& title,const string& author,const string& cprDate,const bool& ch); 
void checkBook(void); 
void uncheckBook(void); 
string ISBN(){return I;}; 
string title(){return t;}; 
string author(){return a;}; 
string cprDate(){return c;}; 
bool isChecked(){return check;}; 
private: 
string I; //ISBN 
string t; //title 
string a; //author 
string c; //copyright date 
bool check; //is checked? 
}; 

Book::Book(const string& ISBN,const string& title,const string& author,const string& cprDate,const bool& ch){ 
I=ISBN; 
t=title; 
a=author; 
c=cprDate; 
check=ch; 
} 

void Book::checkBook(void) 
{ 
check=true; 
} 
void Book::uncheckBook(void) 
{ 
check=false; 
} 
int main() 
{ 
Book eragon{"ISBN:19851654-1851651-156115-156156","Eragonas","Paolini","2007",true}; 
//^This does not compile, it gives 2 errors: expected primary-expression before eragon 
//and expected ';' before semicolon 
return 0; 
} 

Я делаю упражнения из книги «Программирование - Принципы и практика Использование C++» и i`m застрял в главе 9 упражнений 5:Can`t инициализировать объект с помощью конструктора в C++

Это упражнение и следующие несколько требуют, чтобы вы разрабатывали и реализовывали класс книги, например, вы можете представить как часть программного обеспечения для библиотеки. Классная книга должна иметь членов для имени ISBN, названия, автора и авторских прав. Также сохраняйте данные о том, проверена ли книга. Создайте функции для возврата этих значений данных. Создавайте функции для входа и выхода книги. Простая проверка данных, введенных в книгу; например, принимать ISBN только формы nn-n-x, где n - целое число, а x - цифра или буква. Храните ISBN в виде строки.

и я немогу даже инициализировать книги объекта:/

+1

Что происходит/не происходит? Что вы подразумеваете под «я не могу даже инициализировать объект книги»? Ошибка компиляции? Ошибка компоновщика? Исключение? CoreDump? – Arkadiy

+0

@Arkadiy: Ошибка указана в исходном коде как комментарий. –

ответ

6

Ваш компилятор не находится в режиме C++ 11. Синтаксис инициализатора {...} является новым в C++ 11. Пожалуйста, посмотрите этот вопрос для enabling C++11 support in CodeBlocks.

Другой вариант - использовать синтаксис C++ 03, но если в этой книге используется C++ 11, вам, вероятно, потребуется включить его в конце концов. Синтаксис C++ 03 будет:

Book eragon("ISBN:19851654-1851651-156115-156156","Eragonas","Paolini","2007",true); 
-1

В классическом C++, вы бы выделить книгу в куче с использованием

Book *eragon = new Book("ISBN: ..." And all your other parameters 

Я на таблетки и не может копировать все ваши аргументы показать точно

+0

Почему он/она хочет выделить в кучу? Стек быстрее – Amadeus

+0

Он изучает C++. Редко, что объекты реального мира, такие как книги, выделяются в стеке. Я считаю, что более важно сосредоточиться на стиле, чем скорость для такой небольшой программы. Не читал книгу, но было бы легче построить этот урок, чтобы построить каталог, если он использовал объекты кучи. –

+0

В то время как я не тот, кто ниспровергает, я утверждаю, что кубизм борьбы с новым/удалением слишком велик, чтобы оправдать выделение в куче. Если необходимо сделать распределение кучи, лучше узнать, как использовать интеллектуальный указатель, например. std :: unique_ptr – Amadeus

0

Я не известно, если ваш компилятор делает это для вас, но, вероятно, вам нужно включить строку заголовка

#include <string> 

и, как сказал Dark Falcon, измените вашу инициализацию книги, от {...} до (...), чтобы скомпилировать в компиляторе pre C++ 11

0

В int main() вы инициализируете конструктор с использованием неправильного набора скобок. Используйте() вместо {}.

Изменить это TO-

Книга Эрагон ("ISBN: 19851654-1851651-156115-156156", "Eragonas", "Паолини", "2007", правда);

Надеюсь, что он решает вашу проблему.

Смежные вопросы