2017-07-29 225 views
0

裏面我有一個構造函數的一個問題。 我有兩個類(MyClass1,MyClass2)。錯誤C2512:沒有適當的默認構造函數可用:使用參數聲明對象!構造

MyClass1.h

class MyClass1 { 
public: 
    MyClass1(); 
    ... 
private: 
    MyClass2 object; 
    ... 
} 

MyClass1.cpp

#include "MyClass1.h" 

MyClass1::MyClass1() {  //This constructor causes the error!!! 
    object = MyClass2(1000); 
    ... 
} 

... 

MyClass2.h

class MyClass2 { 
public: 
    MyClass2(int); 
    ... 
private: 
    int id; 
    ... 
} 

MyClass2.cpp

#include "MyClass2.h" 

MyClass2::MyClass2(int id) { 
    this->id = id; 
    ... 
} 
... 

當創建「MyClass1的」我收到此錯誤消息的實例:

error C2512: 'MyClass2': no appropriate default constructor available 
+0

使用一個初始化列表來初始化,而不是做的是,在構造函數體中的成員變量。 – user0042

+0

在哪裏'的#include 「MyClass2.h」''中MyClass1.cpp'?似乎應該在那裏,因爲你參考了'MyClass2'。 – InternetAussie

回答

2

你試圖分配object構造體內,在這之前object必須是缺省構造,但MyClass2沒有按沒有默認的構造函數。

您應該使用member initializer list指定哪個構造應該被用來初始化object

在形成構造函數體的複合語句開始執行之前,完成所有直接基礎,虛擬基礎和非靜態數據成員的初始化。成員初始化列表是可以指定這些對象的非默認初始化的地方。

例如,

MyClass1::MyClass1() : object(1000) { 
} 
0

錯誤是當進入構造函數的主體時,每個成員都應該被構造和初始化。由於沒有參數,因此編譯器會抱怨MyClass2

語法來初始化成員對象是:

MyClass1::MyClass1() : object(1000) {} 
相關問題