2011-09-11 82 views
0

我在編寫這段代碼之前的目標是到只是練習和了解更多關於C++。枚舉和類 - 運行時錯誤!

該代碼由類球組成,其具有球的屬性,如顏色,大小,重量以及球的「品牌」和價格。

#include<iostream> 
#include<string> 
using namespace std; 

class ball 
{ 
private: 
    int price;          //Price of a ball in rupees . 
    enum colour { red , green , blue } colour;  // Colour of the ball . 
    string brand;         // Brand of the ball REEBOK ADIDAS etcetera . 
    float size;          // Diameter of the ball . 
    enum weight { light , medium , heavy }weight; // Qualitative weight . 
public: 

    ball(); 
    void get_price(); 
    void get_colour(); 
    void get_brand(); 
    void get_size(); 
    void get_weight(); 
}; 

ball::ball() : price(0) , brand(NULL) , size(0.0) 
{ 
    cout<<"In the constructor"; 
    colour=blue; 
    weight=medium; 
} 

void ball::get_price() 
{ 
    cout<<"In the function get_price()"<<endl<<price<<endl; 
} 

void ball::get_colour() 
{ 
    cout<<"In the function get_colour()"<<endl<<colour<<endl; 
} 

void ball::get_brand() 
{ 
    cout<<"In the function get_brand()"<<endl<<brand<<endl; 
} 

void ball::get_size() 
{ 
    cout<<"In the function get_size()"<<endl<<size<<endl; 
} 

void ball::get_weight() 
{ 
    cout<<"In the function get_weight()"<<endl<<weight<<endl; 
} 

int main() 
{ 
    ball glace; 
    glace.get_price(); 
    glace.get_colour(); 
    glace.get_brand(); 
    glace.get_size(); 
    glace.get_weight(); 
} 

問題來了的類定義枚舉使用。 最初我遇到了像C2436,C2275,C2064這樣的錯誤。 每個編譯中的所有錯誤均歸因於枚舉。修復後,最後上面的代碼是編譯錯誤免費!但它給我一個運行時錯誤。 !

任何人都可以向我解釋爲什麼? PS:我使用Microsoft Visual C++ 2005 express版本。

+0

哪個運行時錯誤?哪裏? –

+0

那個說**的對話框發送錯誤報告** – jsp99

回答

5

您在std :: string上調用品牌(NULL),這就是您所得到的運行時錯誤。它調用std :: string構造函數,它使用一個char const *來從C字符串創建,並且它不能爲NULL。要構造一個空的std :: string,只需在你的初始化列表中調用brand(),或者甚至跳過它,因爲如果你這樣做了,默認的構造函數會被編譯器自動調用。

+0

THANKs :) ..所以,你說我的枚舉沒有錯? – jsp99

+0

不,我不這麼說。我沒有檢查你的枚舉代碼,只是尋找你的運行時錯誤的來源。 –

+0

由於枚舉,我得到了許多編譯時錯誤。所以認爲即使這個運行時間錯誤可能是因爲他們。謝謝澄清。 :) – jsp99