#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对象:/
答案 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
我在平板电脑上,无法复制所有参数以准确显示