C ++枚举放置混乱

时间:2015-12-01 15:02:33

标签: c++ types enums

我试图在C ++中使用枚举

现在当我将枚举放在枚举声明之上时,它就可以了。但是,如果我首先声明枚举类型,我会收到错误"'状态'没有命名类型"。

WORKS

enum states
{
    DEMO, STATE1, STATE2
};
states currentState;

DOESNT WORK

states currentState;
enum states
{
    DEMO, STATE1, STATE2
};

错误

 error: 'states' does not name a type :states currentState

我刚刚开始编写Arduino编码,我从来没有在C#或Java中遇到过这个问题。

2 个答案:

答案 0 :(得分:1)

在使用标识符之前,您必须使用前向声明。如果必须知道大小或功能(例如类函数),则需要完整定义。

enum states; //forward declaration.
states currentState; // OK

//some other code
void foo(states currentState); //OK

enum states
{
    DEMO, STATE1, STATE2
};

答案 1 :(得分:1)

作为评论中的状态,您无法在c ++中使用名称而无需事先声明。

enum无法向前声明,但enum class可以(在C ++ 11中引入)。

所以你可以这样做:

enum class states /* : int */ ; // forward declaration

states currentState;

enum class states /* : int */
{
    DEMO, STATE1, STATE2
};

虽然enum class与简单enum不同,但没有明确转换为int,所以要小心。