爲什麼下面的代碼不起作用?我得到錯誤C2059'不變'。使用Visual C++ 2008.創建類實例作爲另一個類的成員
class C {
public:
C(int arg) {}
};
class B {
public:
C c(1); //error C2059
B() {}
};
我無法定義默認構造函數。此外,我不能聲明一個指向C的指針,然後在B的構造函數中「new it」。
爲什麼下面的代碼不起作用?我得到錯誤C2059'不變'。使用Visual C++ 2008.創建類實例作爲另一個類的成員
class C {
public:
C(int arg) {}
};
class B {
public:
C c(1); //error C2059
B() {}
};
我無法定義默認構造函數。此外,我不能聲明一個指向C的指針,然後在B的構造函數中「new it」。
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)中使用。 - 注完]
C c {1};給我編譯器錯誤C2473'c'看起來像一個函數定義,但沒有參數列表。 – devguy24 2014-09-30 12:20:17
通常的方法做什麼,我認爲你正在試圖做的是一個member initialiser list:
class B {
public:
C c;
B() : c(1) {}
};
_「我認爲絕對沒有錯我的代碼。」 _哪種學習資源教會你如何在類定義內初始化成員? – 2014-09-30 12:28:33
我不明白你爲什麼不得不刪除這個句子。 – devguy24 2014-09-30 13:13:09
這完全沒有意義,也沒有增加這個問題。這僅僅是「我的代碼必須是正確的,我看到我所做的事情絕對沒有錯」,這是什麼,這是別人的錯?編譯器壞了?該語言的設計思路不是以_you_爲標準的?顯然你犯了一個錯誤,你的小「沒有錯」不會改變這一點。 – 2014-09-30 13:19:00