使用构造函数初始化枚举
initializing enum with a constructor
我已经找到了这个很好的解释Initialising enum via constructors,但它不符合我的需要。
所以我在 class 中声明了一个枚举,并想在 class 构造函数中初始化它,然后通过方法中的 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',它是非class类型'myClass::State'
有人能解释一下如何实现这样的代码吗?如果我想用默认参数初始化 State 怎么办?
谢谢!
在您的 class 中,您需要包含一个 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
)造成的。
我已经找到了这个很好的解释Initialising enum via constructors,但它不符合我的需要。
所以我在 class 中声明了一个枚举,并想在 class 构造函数中初始化它,然后通过方法中的 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',它是非class类型'myClass::State'
有人能解释一下如何实现这样的代码吗?如果我想用默认参数初始化 State 怎么办?
谢谢!
在您的 class 中,您需要包含一个 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
)造成的。