【问题标题】:initializing enum with a constructor使用构造函数初始化枚举
【发布时间】:2021-08-03 02:59:28
【问题描述】:

我已经找到了这个非常好的解释Initialising enum via constructors,但它不符合我的需要。

所以我在类中声明了一个枚举,并希望在类构造函数中对其进行初始化,然后通过方法中的 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;

    }
}

但显然这不是正确的实现方式。

我收到以下错误:

错误:‘enum class myClass::State’不是‘myClass’的非静态数据成员

错误:在‘enumState’中请求成员‘state1’,它是非类类型‘myClass::State’

谁能解释我如何实现这样的代码,如果我想用默认参数初始化 State 怎么办?

谢谢!

【问题讨论】:

  • 你不能初始化一个类型,它是一个编译时构造。你想要做的正是suggested answer does - 定义一个成员变量并在构造函数中初始化该object。请创建一个minimal reproducible example,这是一个分散的声明和定义的混合体。例如。 enumState 是一个全局变量。

标签: c++ c++11 enums switch-statement enum-class


【解决方案1】:

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

class myClass {
    
    myClass();
     
    enum class State;

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

    void update();
};

然后您可以在构造函数内部初始化新的enumState 变量而不是State 枚举类型。

要解决您看到的第二个错误,您需要使用 update() 方法:

void myClass::update(){
    switch (enumState){
    case State::state1:
            break;
    case State::state2:
            break;
    
    }
}

这是由于访问枚举值的方式(使用Enum::value 而不是enum.value)。

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多