微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用构造函数初始化枚举

如何解决使用构造函数初始化枚举

我已经找到了这个非常好的解释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 该怎么办?

谢谢!

解决方法

在您的类中,您需要包含一个 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)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。