2014-10-03 81 views
-6

下面給我一個錯誤:爲什麼我不能像類名一樣使用變量名?

struct foo 
{ 
}; 

int main() 
{ 
    foo foo; 
    foo foo2; 
} 

main.cpp:14:9: error: expected ';' before 'foo2' 
    foo foo2 = foo; 

main.cpp:14:19: warning: statement has no effect [-Wunused-value] 
    foo foo2 = foo; 

然而foo foo, foo2工作完全正常。什麼規則阻止我採取第一種方式?

你們都是downvoting或留下粗魯的意見,而不是回答這個問題。我正在尋求使第一種方法無法編譯的規則。

+0

更好的問題是爲什麼呢?充其量,它可能會編譯,你的合作者會恨你。在最糟糕的情況下,你會遇到很難調試的可怕的名字遮蔽問題。 – CoryKramer 2014-10-03 12:28:32

+2

「爲什麼我不能只將變量名稱與類名稱相同?」因爲它混亂如地獄。 – Borgleader 2014-10-03 12:28:37

+0

這不是你編譯的代碼。給真正的代碼。 – matsjoyce 2014-10-03 12:28:41

回答

6

對象foo的名稱與結構名稱一致的聲明隱藏了結構的名稱。因此,在下面的聲明

foo foo2; 

編譯器認爲名稱foo爲對象,而不是結構的名稱的名稱。爲了避免錯誤,您可以使用結構foo的詳細名稱。例如

struct foo 
{ 
}; 

int main() 
{ 
    foo foo; 
    struct foo foo2; 
} 

順便說以下有趣的聲明是有效的:)

struct foo { int foo; } foo, foo2 = foo; 
相關問題