簡體   English   中英

無法使用C ++中的構造函數初始化對象

[英]Can`t initialize object using constructor in c++

   #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類,例如您可以想象作為圖書館軟件的一部分。 課堂書籍應具有ISBN,標題,作者和版權日期的成員。 還存儲有關書籍是否已簽出的數據。 創建用於返回這些數據值的函數。 創建用於簽入和簽出書籍的功能。 對輸入到Book中的數據進行簡單驗證; 例如,僅接受nn-nx形式的ISBN,其中n是整數,x是數字或字母。 將ISBN存儲為字符串。

而且我什至不能初始化Book對象:/

您的編譯器不在C ++ 11模式下。 {...}初始化程序語法是C ++ 11中的新增功能。 請參閱此問題以在CodeBlocks中啟用C ++ 11支持

另一種選擇是使用C ++ 03語法,但是如果本書使用的是C ++ 11,則最終可能需要將其打開。 C ++ 03語法為:

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

我不知道您的編譯器是否正在為您執行此操作,但是,可能您需要包括字符串標頭

 #include <string>

並如Dark Falcon所說,將您的書籍初始化從{...}更改為(...),以在c ++ 11之前的編譯器中進行編譯

在int main()中,您使用錯誤的括號集來初始化構造函數。 使用()代替{}。

更改為-

書籍eragon(“ ISBN:19851654-1851651-156115-156156”,“ Eragonas”,“ Paolini”,“ 2007”,true);

希望它能解決您的問題。

在經典C ++中,您將使用以下方法在堆上分配一本書

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

我在平板電腦上,無法復制所有參數以准確顯示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM