我正在使用g ++在Cygwin中編譯C ++程序,并且有一個其構(gòu)造函數(shù)沒有參數(shù)的類。我的臺詞是:MyClass myObj();myObj.function1();當嘗試編譯它時,我得到了消息:error: request for member 'function1' in 'myObj', which is of non-class type 'MyClass ()()'經(jīng)過一番研究,我發(fā)現(xiàn)解決方法是將第一行更改為MyClass myObj;我可以發(fā)誓我以前在C ++中用括號完成了空的構(gòu)造函數(shù)聲明。這可能是對我使用的編譯器的限制嗎?還是語言標準真的說不對沒有參數(shù)的構(gòu)造函數(shù)使用括號?
3 回答

波斯汪
TA貢獻1811條經(jīng)驗 獲得超4個贊
盡管MyClass myObj();
可以使用空的初始化程序或函數(shù)聲明將其解析為對象定義,但語言標準指定始終解決歧義,而傾向于函數(shù)聲明。在其他上下文中(例如,在new
表達式中或構(gòu)造值初始化的臨時值時),可以使用空括號初始化程序。

jeck貓
TA貢獻1909條經(jīng)驗 獲得超7個贊
這被稱為最令人煩惱的解析問題。當解析器看到
MyClass myObj();
它認為您正在聲明一個myObj沒有參數(shù)的函數(shù),并返回MyClass。
要解決此問題,請使用:
MyClass myObj;

一只名叫tom的貓
TA貢獻1906條經(jīng)驗 獲得超3個贊
我在C ++標準(第8.5.8節(jié))中發(fā)現(xiàn)了這一點:
一個其初始化程序是一組空括號(即())的對象,應進行值初始化。
[注意:由于初始化程序的語法不允許使用(),
X a ();
不是X類對象的聲明,而是不帶參數(shù)并返回X的函數(shù)的聲明。在某些其他初始化上下文(5.3.4、5.2.3、12.6.2)中允許使用()形式?!沧
- 3 回答
- 0 關(guān)注
- 443 瀏覽
添加回答
舉報
0/150
提交
取消