Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;枚举位置混淆 我试图在C++ 中使用枚举_C++_Types_Enums - Fatal编程技术网

C++;枚举位置混淆 我试图在C++ 中使用枚举

C++;枚举位置混淆 我试图在C++ 中使用枚举,c++,types,enums,C++,Types,Enums,现在,当我将枚举放在枚举声明之上时,它就可以工作了。但是如果我先声明枚举类型,我会得到错误“'states'没有命名类型” 工作 不起作用 states currentState; enum states { DEMO, STATE1, STATE2 }; 错误 我最近才开始编写Arduino,我在C#或Java中从未遇到过这个问题。在使用标识符之前必须使用前向声明。如果必须知道大小或功能(例如类功能),则需要完整的定义 enum states; //forward declarati

现在,当我将枚举放在枚举声明之上时,它就可以工作了。但是如果我先声明枚举类型,我会得到错误“'states'没有命名类型”

工作

不起作用

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


我最近才开始编写Arduino,我在C#或Java中从未遇到过这个问题。

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

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

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

enum states
{
    DEMO, STATE1, STATE2
};

作为注释中的状态,不能在C++中使用以前没有声明的名称。


enum
不能向前声明,但是
enum类
可以(在C++11中引入)

因此,您可以:

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

states currentState;

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

注意,因为
enum类
不同于简单的
enum
,没有显式转换为
int

为什么不能按其工作方式进行转换?可以使用前向声明
enum状态用于不起作用的部分。因为我喜欢在函数和/或枚举上方声明。如果这是C++中的一件事,那就有点令人失望了,这与Ennices无关。你不能在C++中使用任何以前没有声明过的名字。如果像我这样的问题被否决,因为它太简单了,我对这个网站的社区感到失望。每个人都是如此的暴躁,如果你不喜欢这个问题继续下去,有些人还不知道一切。为什么它不起作用,你能给我们看看你使用的代码吗?@vishal就是这样做的,它不起作用。“此声明没有存储类或类型说明符”它在VS2012(C++或C代码)中工作,您尝试了什么?
enum
无法向前声明,
enum class
可以。此代码使用带有默认标志的VS2012进行编译。这可能是VS特定的扩展。我没有深入研究这个问题。
enum states; //forward declaration.
states currentState; // OK

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

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

states currentState;

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