C++ 使用构造函数初始化枚举

C++ 使用构造函数初始化枚举,c++,c++11,enums,switch-statement,enum-class,C++,C++11,Enums,Switch Statement,Enum Class,我已经找到了这个很好的解释,但它不符合我的需要 所以我在类中声明了一个枚举,并希望在类构造函数中初始化它,然后通过方法中的switch语句调用这个枚举,但我无法实现它。 下面是一个代码: class myClass { myClass(); enum class State; void update(); }; // initialise State()

我已经找到了这个很好的解释,但它不符合我的需要

所以我在类中声明了一个枚举,并希望在类构造函数中初始化它,然后通过方法中的switch语句调用这个枚举,但我无法实现它。 下面是一个代码:

    class myClass {
        
        myClass();
        
        enum class State;

        void update();

        };
    
    
    //  initialise State() with default value, so state1=0, state2=1
    myClass::myClass() : State() {} 
    
    enum class
        myClass::State
        {
            state1,
            state2
        } enumState;
    
    
    
    
    void myClass::update(){
    
    switch (enumState){
    
    case enumState.state1:
         break;
    case enumState.state2:
         break;

    }
}
但显然,这并不是正确的实施方式

我发现以下错误:

错误:“枚举类myClass::State”不是“myClass”的非静态数据成员

错误:“enumState”中的成员“state1”请求,该成员属于非类类型“myClass::State”

有人能给我解释一下如何实现这样的代码吗?如果我想用默认参数初始化State怎么办


谢谢大家!

在类中,您需要包含一个类型为
State
的变量:

class myClass {
    
    myClass();
     
    enum class State;

    // create a class member variable of type State named enumState;
    State enumState;

    void update();
};
然后在构造函数内部,您可以初始化新的
enumState
变量,而不是
State
enum类型

要解决您看到的第二个错误,您需要对
update()
方法执行以下操作:

void myClass::update(){
    switch (enumState){
    case State::state1:
            break;
    case State::state2:
            break;
    
    }
}
这是由于访问枚举值的方式(使用
Enum::value
而不是
Enum.value
)造成的。

无法初始化类型,它是编译时构造。您想要做的正是-定义成员变量并在构造函数中初始化该对象。请创建一个,这是分散声明和定义的混合。例如,
enumState
是一个全局变量。