2013-03-09 19 views
2

此代碼編譯沒有任何問題,如果測試不叫,所以我的結論是C++允許創建類和函數具有相同的名稱:如何解決同名函數和類之間的模糊情況?

class test {}; 
void test() {} 

int main() { 
    test an_instance_of_test; 
} 

錯誤是:

<stdin>: In function 'int main()': 
<stdin>:5:8: error: expected ';' before 'an_instance_of_test' 
<stdin>:5:27: warning: statement is a reference, not call, to function 'test' [-Waddress] 

而且我知道,我不應該在第一時間創建這樣的明確性,但是這可能會在其他人的代碼中體驗到,並且我在詢問在沒有更改函數或類定義的情況下是否有辦法解決這個問題。

回答

3

你應該使用一個詳細的類型說明:由於標準說

class test an_instance_of_test; 

(§3.4.4):

闡述型符(7.1.6.3)可能用於指代先前聲明的類名稱枚舉名稱即使該名稱已被非類型聲明隱藏。

的名稱查找會忽略非類型的任何名稱:

標識符根據3.4.1而忽視已宣告任何非類型名稱擡頭。

相關問題