2015-11-19 34 views
1

我正在建立一個能夠創建汽車特性的課程,並且在試圖在控制檯上顯示autovehicle a1時遇到一些困難。我收到一個我無法解釋的錯誤。請幫幫忙,如果可能的話嘗試顯示時我的第一課錯誤

#include <iostream> 
using namespace std; 

class Autovehicle { 
private: 
    //registry number 
    char * car_registration_number; 
    char engine; 
    int engine_cc; 
    int avg_consumption; 
    int avg_speed; 
    int avg_consumption_urban; 
    int avg_speed_urban; 
    int max_speed; 
    static int number_of_autovehicles; 
public: 
    //getters 
    char * get_car_registration_number() { 
     return this->car_registration_number; 
    } 

    char get_engine() 
    { 
     return this->engine; 
    } 

    int get_engine_cc() { 
     return this->engine_cc; 
    } 
    int get_avg_consumption() { 
     return this->avg_consumption; 
    } 
    int get_avg_speed() { 
     return this->avg_speed; 
    } 
    int get_avg_consumption_urban() { 
     return this->avg_consumption_urban; 
    } 
    int get_avg_speed_urban() { 
     return this->avg_speed_urban; 
    } 
    int get_max_speed() { 
     return this->max_speed; 
    } 
    static int get_number_of_cars() { 
     return number_of_autovehicles; 
    } 
    //setters 
    void set_car_registration_number(char *car_reg_nr) { 
     this->car_registration_number = car_reg_nr; 
    } 
    void set_engine(char eng) { 
     this->engine = eng; 
    } 
    void set_engine_cc(int eng_cc) { 
     this->engine_cc = eng_cc; 
    } 
    void set_avg_consumption(int avg_cons) { 
     this->avg_consumption = avg_cons; 
    } 
    void set_avg_speed(int avg_spd) { 
     if (this->avg_speed > avg_spd) 
      cout << endl << "You should probably slow down"; 
     this->avg_speed = avg_spd; 
    } 
    void set_avg_consumption_urban(int avg_cons_urb) { 
     this->avg_consumption_urban = avg_cons_urb; 
    } 
    void set_avg_speed_urban(int avg_spd_urb) { 
     if (this->avg_speed_urban > avg_spd_urb) 
      cout << endl << "You should probably slow down"; 
     this->avg_speed_urban = avg_spd_urb; 
    } 
    void set_max_speed(int max_spd) { 
     this->max_speed = max_spd; 
    } 
    //default constructor 
    Autovehicle(){ 
     number_of_autovehicles++; 
     this->car_registration_number = new char[strlen("There are no autovehicles") + 1]; 
     strcpy(this->car_registration_number, "There are no autovehicles"); 
     this->engine = NULL; 
     this->engine_cc = 0; 
     this->avg_consumption = 0; 
     this->avg_speed = 0; 
     this->avg_consumption_urban = 0; 
     this->avg_speed_urban = 0; 
     this->max_speed = 0; 

    } 
    //constructor 
    Autovehicle(char* car_reg_nr, char eng, int eng_cc, int avg_cons, int avg_spd, int avg_cons_urb, int avg_spd_urb, int max_spd){ 
     number_of_autovehicles++; 
     this->car_registration_number = new char[strlen(car_reg_nr) + 1]; 
     strcpy(this->car_registration_number, car_reg_nr); 
     this->engine = eng; 
     this->engine_cc = eng_cc; 
     this->avg_consumption = avg_cons; 
     this->avg_speed = avg_spd; 
     this->avg_consumption_urban = avg_cons_urb; 
     this->avg_speed_urban = avg_spd_urb; 
     this->max_speed = max_spd; 
    } 
    //destructor 
    ~Autovehicle() { 
     delete[]this->car_registration_number; 
     number_of_autovehicles--; 
    } 

}; 

這就是無效的主要和問題開始:

void main() { 
    Autovehicle a1("Engniasd", "gasoline", 1980, 11, 50, 8, 100) { 
     cout<<"registration number: "<< this->car_registration_number; 
     cout << "engine: " << this->engine; 
     cout << "engine cc:" << this->engine_cc; 
     cout << "consumption: " << this->avg_consumption; 
     cout << "avg speed: " << this->avg_speed; 
     cout << "urban consumption: " << this->avg_consumption_urban; 
     cout << "urban speed " << this->avg_speed_urban; 

    } 
} 

是我得到的問題是,當「構造的無實例參數列表匹配」試圖顯示Autovehicle A1(Engniasd,第一項)

回答

1

嘗試註冊號碼添加到您的汽車與車輛數量:

Autovehicle A1(「REG12345」,「汽油」,1980,11,50,8,100,50,)。

0

在學校atm和無法得到這個好看,但看看你的構造函數,你有一個字符而不是char ptr你的第二個參數。你不能隱式地將char轉換爲const char *,你可以使用char * - > const char *,所以把第二個參數改爲char *。此外,將void main()更改爲int main(),main應該是int(ansi標準),許多編譯器可能不會使用void main()來接受您。

+0

我讓他們兩個char *之,但我仍然有相同的錯誤 –

+0

請注意,您在構造函數中缺少一個參數。它設置爲尋找8個參數,你只給它7個(當然缺少一個int)。 – Jeff

+0

當我嘗試把另一個int放到第一個錯誤中時 –

0

我看到幾個問題。

你能解釋爲什麼car_registration_number和engine有不同的類型嗎?

如果你可以自己回答這個問題,你可以解決你的問題之一。

另外,您應該將類​​聲明與實現分開,並確保初始化所有變量。包括靜態的。在調用構造函數

Autovehicle(char* , char , int, int, int, int, int, int) 

第二個參數是char,但你傳遞的char *

+0

我做了他們兩個字符*,但我仍然有相同的錯誤 –

0

的問題,也有構造6個int參數,但你主要通過只有五個。你不能以你的方式打印對象的值。在你的類

void print() 
{ 
    cout<<"registration number: "<< this->car_registration_number; 
    cout << "engine: " << this->engine; 
    cout << "engine cc:" << this->engine_cc; 
    cout << "consumption: " << this->avg_consumption; 
    cout << "avg speed: " << this->avg_speed; 
    cout << "urban consumption: " << this->avg_consumption_urban; 
    cout << "urban speed " << this->avg_speed_urban; 
} 

創建函數並調用它在main()作爲

Autovehicle a1("Engniasd", "gasoline", 1980, 11, 50, 8, 100, 0); 
a1.print(); 
+0

謝謝,修復了錯誤,它編譯並顯示我想要的,但現在我得到一個「調試斷言失敗!」之後。 –

+0

在哪一行中得到「調試斷言失敗!」 ? –

+0

它說#141,但這是一個不同的類,它還沒有在主要功能。 –

1

你的構造eng定義爲char,但你通過它"gasoline"這是一個const char*

另外,將汽車登記號存儲爲char*。讓您的生活更輕鬆,並改用std::string。這樣,你和你的班級用戶不需要擔心管理指針的生命週期。

而在main中,你已經聲明瞭一個名爲a1的變量,但它看起來像你試圖使用this來調用它的方法。你需要對實例變量調用:

cout << "engine: " << a1.engine; 

您還需要終止a1聲明用分號,不需要大括號,如:

Autovehicle a1("Engniasd", "gasoline", 1980, 11, 50, 8, 100); 
cout << "registration number: "<< a1.car_registration_number; 
+0

我改變了所有這一切,它解決了錯誤,但現在在括號{{它說它期待一個「;」之後) –

+0

@OctavianCatusanu - 我已經更新了答案。如果您在理解這些錯誤時遇到困難,那麼隨着您的進步,您將會與C++陷入困境。 – Sean

相關問題