2012-05-08 64 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,我同意这就是发生了什么事。 –

相关问题