不能在c ++中使用构造函数初始化对象

时间:2014-09-19 16:47:07

标签: c++ object constructor codeblocks

   #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 ++的原理和实践”这本书进行练习,并且我坚持第9章练习5:

本练习和接下来的几个练习要求您设计和实现Book类,例如您可以将其想象为库的软件的一部分。 Class Book应包含ISBN,标题,作者和版权日期的成员。还存储有关书籍是否已签出的数据。创建用于返回这些数据值的函数。创建用于检入和退出书籍的功能。对书中输入的数据进行简单验证;例如,仅接受nn-n-x形式的ISBN,其中n是整数,x是数字或字母。将ISBN存储为字符串。

我甚至无法初始化Book对象:/

4 个答案:

答案 0 :(得分: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 :(得分:0)

我不知道您的编译器是否正在为您执行此操作,但是,您可能需要包含字符串标头

 #include <string>

并且,正如Dark Falcon所说,将书籍初始化从{...}更改为(...),以便在编译器pre c ++ 11中进行编译

答案 2 :(得分:0)

在int main()中,您使用错误的括号集初始化构造函数。 使用()而不是{}。

将其更改为 -

预订eragon(“ISBN:19851654-1851651-156115-156156”,“Eragonas”,“Paolini”,“2007”,真实);

希望它能解决你的问题。

答案 3 :(得分:-1)

在经典C ++中,您将使用

在堆上分配一本书
    Book *eragon = new Book("ISBN: ..." And all your other parameters 

我在平板电脑上,无法复制所有参数以准确显示