2015-06-16 23 views
-5

當我編譯程序時,當我使用2參數構造函數創建bookClass對象時,出現關於int的錯誤。該錯誤與解析到構造函數的整數參數有關。該程序是:在編譯小型C++程序時出錯

#include <iostream> 
#include <string> 

using namespace std; 

    class bookClass{ 
    private: 
    string bookName; 
    int bookNumber; 



    public: 


    void setName(string c){ 
    bookName=c; 
    } 

    void setNumber(int d){ 
    bookNumber=d; 
    } 

    string getName(){ 
    return bookName; 
    } 

    int getNumber(){ 
    return bookNumber; 
    } 
    bookClass(string a, int b){ 
    bookName=a; 
    bookNumber=b; 
    } 


    }; 

    int main() 
    { 
    int numberr; 
    string name; 
    cout << "Enter the book name: "; 
    cin >> name; 
    cout << "\nEnter the book number: "; 
    cin >> numberr; 

    bookClass book=new bookClass(name, numberr); 

    cout << "\n\nThe book " << book.getName() << " has book number " <<   
     book.getNumber() << endl; 


    return 0; 
    } 
+0

我敢肯定,編譯器不說*「的錯誤new操作創建一個對象關於int「*。請在您的問題中包含錯誤消息的實際文本。 –

+0

你需要發佈*實際的錯誤消息*,而不是模糊地回憶它可能發生了什麼。 –

+0

考慮閱讀錯誤消息。然後將你的代碼減少到一個mcve。如果您到那時還沒有解決問題,請在此發佈mcve和錯誤消息。 – user2079303

回答

0

編譯您的代碼我沒有得到您建議的錯誤。但是,此行存在問題:

bookClass book = new bookClass(name, numberr); 

C++不是Java。 new返回一個指向爲給定類動態分配的內存的指針。

你想要的恰恰是:

bookClass book (name, numberr); 
+0

謝謝,那就是問題所在。 –

0

與您的代碼的問題很簡單。我想你是在C++之前用Java或C#編程的。在C++中,我們只需要在堆上明確創建一個對象(並獲取一個指針),就可以調用new運算符。

bookClass* book=new bookClass(name, numberr); 

不過,現在你在煩惱,因爲你在呼喚book.getName()其中book類型爲指針的東西,它沒有成員getName()。您必須先取消引用該指針,然後調用成員函數(*book).getName();或簡單地book->getName();

然而,由於C++的對象不必在堆中(Java對象必須),你可以不使用bookClass book(name, numberr);

+0

謝謝你的錯誤 –