2014-09-30 149 views
-1

爲什麼下面的代碼不起作用?我得到錯誤C2059'不變'。使用Visual C++ 2008.創建類實例作爲另一個類的成員

class C { 
public: 
    C(int arg) {} 
}; 

class B { 
public: 
    C c(1); //error C2059 
    B() {} 
}; 

我無法定義默認構造函數。此外,我不能聲明一個指向C的指針,然後在B的構造函數中「new it」。

+0

_「我認爲絕對沒有錯我的代碼。」 _哪種學習資源教會你如何在類定義內初始化成員? – 2014-09-30 12:28:33

+0

我不明白你爲什麼不得不刪除這個句子。 – devguy24 2014-09-30 13:13:09

+0

這完全沒有意義,也沒有增加這個問題。這僅僅是「我的代碼必須是正確的,我看到我所做的事情絕對沒有錯」,這是什麼,這是別人的錯?編譯器壞了?該語言的設計思路不是以_you_爲標準的?顯然你犯了一個錯誤,你的小「沒有錯」不會改變這一點。 – 2014-09-30 13:19:00

回答

2

C c()被解釋爲一個函數聲明,並且整數文字本身使語法無效。考慮使用括號代替(C++ 11)或直接初始化:

C c{1}; 

或:

B() : c(1) {} 

§8.5

11,其初始化爲空集括號的一個目的,即 (),應進行值初始化。

[注意:由於()不是由語法初始化允許 ,

X a();

不是X類的 對象的聲明,而是一個函數的聲明不採取任何 參數並返回一個X. ()表格允許在其他初始化上下文(5.3.4,5.2.3,12.6.2)中使用。 - 注完]

+0

C c {1};給我編譯器錯誤C2473'c'看起來像一個函數定義,但沒有參數列表。 – devguy24 2014-09-30 12:20:17

相關問題