2012-10-11 162 views
1

當試圖建立一個包含下面的代碼C++程序:C++的構造函數調用另一個構造

menutype::menutype(int cat_num){ 
    extras list = extras(cat_num); 
} 

extras::extras(int num_cats){ 
    head = new category_node; 
    head->next = NULL; 
    head->category = 1; 
    category_node * temp; 
    for(int i = 1; i < (num_cats); ++i){ 
     temp = new category_node; 
     temp->next = head->next; 
     head->next = temp; 
     temp->category = (num_cats-(i-1)); 
    } 
} 

我收到的錯誤:

cs163hw1.cpp: In constructor ‘menutype::menutype(int)’:
cs163hw1.cpp:59:31: error: no matching function for call to ‘extras::extras()’
cs163hw1.cpp:59:31: note: candidates are:
cs163hw1.cpp:5:1: note: extras::extras(int)

而且我不明白爲什麼,請大家幫忙!

回答

5

由於該行不應該試圖調用默認的構造函數(只複製從int構造函數和轉換構造函數),我就猜你有extras類型的數據成員在menutype類,所以你必須在初始化列表中初始化它,因爲它沒有一個默認的構造函數:

menutype::menutype(int cat_num) : list(cat_num) { //or whatever the member is called 

} 
+0

就是這樣,謝謝 – Flexo1515

+0

@ user1404053隨時隨地。 –

2

好像你menutype持有extras類型的成員。如果是這樣的話,如果extras沒有默認的構造函數(因爲它似乎是這樣),你需要初始化在初始化列表:

menutype::menutype(int cat_num) : myextrasmember(cat_num) {} 
1

一個通常會調用構造函數內的構造另一個類的(如你的例子)以下方式:

menutype::menutype(int cat_num) : list(cat_num) { }

這是作爲構造函數列表更有效(類型額外的)是所謂的初始化器列表。

1

正如別人所說,你正在錯誤地調用構造函數。

其他三個人已經指出了正確的初始化列表方法。但是,沒有人指出如何在構造函數上下文之外正確調用構造函數。

相反的:

extras list = extras(cat_num); 

務必:

extras list(cat_num); 
相關問題