C++枚举位置混乱

C++ enum placement confusion

本文关键字:混乱 位置 枚举 C++      更新时间:2023-10-16

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

现在,当我将枚举放置在枚举的声明之上时,它就工作了。但是,如果我首先声明枚举类型,我会得到错误"‘状态’没有命名类型"。

作品

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

不起作用

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

错误

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

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

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

enum states; //forward declaration.
states currentState; // OK
//some other code
void foo(states currentState); //OK
enum states
{
    DEMO, STATE1, STATE2
};

作为注释中的状态,如果没有以前在c++中的声明,就不能使用name。

enum不能正向声明,但enum class可以(在C++11中引入)。

所以你可以这样做:

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

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