我试图在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中遇到过这个问题。
答案 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
,所以要小心。