我有一個由多個字段組成的類,並且我有幾個構造函數。我也有一個構造函數,它不帶任何參數,但是當我嘗試使用它:構造函數中的奇怪行爲
int main {
A a;
}
編譯器生成一個錯誤,而如果我用這樣的:
int main {
A a();
}
這是好。那是什麼?
謝謝
我有一個由多個字段組成的類,並且我有幾個構造函數。我也有一個構造函數,它不帶任何參數,但是當我嘗試使用它:構造函數中的奇怪行爲
int main {
A a;
}
編譯器生成一個錯誤,而如果我用這樣的:
int main {
A a();
}
這是好。那是什麼?
謝謝
第一main
用A的默認構造函數。第二個聲明一個不帶參數並返回一個A值的函數,這可能不是你想要的。
那麼A的定義是什麼樣的,編譯器產生的錯誤是什麼?
哦,你需要在主聲明提供的參數列表:int main() { //...
,不int main { //...
通過確定你的意思是編譯或它的工作原理?的代碼行:
A a();
是一個命名a
函數不帶參數,並返回A
類型的對象的聲明(或原型)。
我認爲任何人有機會幫助你解決真正的問題,你至少需要發佈class A
聲明。
你說得對,我有個問題裏面的這個班。
Charles和Michael Burr都認定第二個聲明實際上是函數原型而不是A
的實例化。
至於可能的原因您的第一個代碼段沒有工作,你會得到一個編譯錯誤,在這種情況下,當:
A
; ORA
包含沒有默認構造函數的類型的對象;或A
包含參考成員;和
您提供其省略了從初始化器列表,這些子對象的一個或多個默認的構造函數。
所有這些子對象都需要一些初始化的方式,編譯器生成的默認構造函數不會這樣做。請注意,在所有情況下,您需要在構造函數的初始化列表而不是主體中初始化它們。