2013-04-01 138 views
0

我想这样做:枚举声明和定义

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}gSense; 

如果我在输入这个.h文件中的一切都近乎完美,但我不能让这将返回GSENSITIVITY type.It的方法不承认它。另外我不能在.cpp上做任何gSense的定义。至少我使用的语法不起作用。哪个是正确的语法?

而且我不能只需键入:

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}; 

我得到这个错误:

error: a storage class can only be specified for objects and functions

+2

也许你应该尝试解释你为什么要将const关键字添加到一个枚举中...然后阅读关于枚举的... – Macmade

+0

可能的[C++:static static枚举是什么意思](http:/ /stackoverflow.com/questions/4971436/c-what-does-static-enum-mean) –

+0

是的这不是我犯的唯一的错误,我也试图使一个函数GSENSITIVITY类型名称“对象”,但在.cpp文件我只输入GSENSITIVITY。它想要键入_name_of_class _ :: GSENSITIVITY _name_if_function()......... – kyrpav

回答

1

在第一个例子,你不能定义任何的源文件gSense,因为它是在已定义头文件。

此外,第二个例子是行不通的,因为你不定义一个变量和staticconst定义enum时没有任何意义。

+0

name_of_class :: GSENSITIVITY _name_if_function(){};这不正确吗? – kyrpav

+0

@kyrpav现在,您正在使用C++作用域语法和'::'运算符。然后只使用标识符是正确的,'some_class :: some_enum some_function();'的确是正确的。 –

+0

@kyrpav:不在C中。 –

0

代码示例混合了两种不同的概念。有时候没关系,但可能会让人困惑。

要定义一个枚举类型:

enum GSENSITIVITY { G1, G15, G2, G3, G4, G8, G16 }; 

G1的值是0,并且每个随后的枚举得到的下一个值。也就是说,问题中的显式值是不需要的。

这就是你需要从一个函数返回一个枚举类型的值:

GSENSITIVITY f() { return G1; } 

如果你想创建一个枚举类型的对象,它就像创建任何其他类型的对象: cv修饰符,类型名,对象名:

const GSENSITIVITY gSense; // value is 0, i.e., G1 

或添加可选的初始化:

const GSENSITIVITY gSense = G3; 

你不需要像static那样标记一个常量;这暗示了const

0

没有更多的上下文,不可能告诉你想要做什么。

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}gSense; 

如果这应该是一个类成员,那么这很好 - 它定义的类型GSENSITIVITY,并且声明变量gSense。您还需要定义和初始化变量,在源文件中,这样,只有一个定义:

const my_class::GSENSITIVITY gSense = something; 

如果它不是一个类成员,那么这将声明的类型,而且也将定义该变量以及声明它。由于它是const,所以定义也必须用一个值初始化它。

在任何一种情况下,都不应该声明函数返回GSENSITIVITY;如果你有问题,那么你需要发布代码和错误信息。

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}; 

定义一个类型,并错误消息告诉您,staticconst不能为类型定义来指定。