2012-05-08 101 views
0

我剛剛從Windows(Visual Studio)切換到Linux(Mint),現在我正在使用QTCreator進行純C++項目。儘管當我嘗試編譯我正在使用VS2010的項目時,一切看起來都很順利,但g ++不會接受以下語法。形狀不是類或名稱空間

enum{ 
    LINE, 
    POLYGON, 
    TRIANGLE 
}Shapes; 

...多碼...

gEngine.AddItem(1,0,Shapes::POLYGON,0,0,0); 
gEngine.AddItem(1,2,Shapes::POLYGON,400,400,-1); 
gEngine.AddItem(1,2,Shapes::POLYGON,800,400,-1); 
gEngine.AddItem(1,2,Shapes::POLYGON,800,800,-1); 
gEngine.AddItem(1,2,Shapes::POLYGON,400,800,-1); 
gEngine.AddItem(1,2,Shapes::POLYGON,400,400,-1); 
gEngine.AddItem(1,1,Shapes::POLYGON,0,0,0); 

(G ++)返回:形狀不是一個類或一個名稱空間;即使它與VS2010完美編譯。

+4

使用'enum class'或者'POLYGON'。 'enum'不會創建它自己的範圍。 – chris

+1

@chris正是如此說的。 VC++有一個愚蠢的擴展,允許該語法,但它不是有效的C++。 –

+2

@SethCarnegie是的,但它確實會給你一個警告,即使它認爲它不正確地接受這是有效的語法。 – AJG85

回答

3

沒有類型Shapes但您已聲明一個名爲Shapes的變量。

要定義類型使用enum Shapes {...}然後創建該類型的變量。

5

我想你想

enum Shapes{ 
    LINE, 
    POLYGON, 
    TRIANGLE 
}; 

此聲明枚舉類型的圖形,但你必須確定這是一個枚舉類型(沒有名字)的各種形狀。

+0

這是C++之前的語法。不知何故,Visual Studio正在寬容。 –

+0

OP中的代碼創建了一個名爲'Shapes'的對象,名稱爲'enum'。然後VC++允許他通過enum變量的_instance_訪問枚舉值。我認爲。 –

+0

〜Mooing Duck,我同意這就是發生了什麼事。 –

相關問題