c++ - 使用构造函数初始化枚举
问题描述
我已经找到了这个非常好的解释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;
}
}
但显然这不是实现它的正确方法。
我收到这些错误:
错误:“枚举类 myClass::State”不是“myClass”的非静态数据成员</p>
错误:在'enumState'中请求成员'state1',它是非类类型'myClass::State'</p>
有人可以解释一下如何实现这样的代码,如果我想用默认参数初始化 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
)。
推荐阅读
- powershell - Microsoft GraphAPI / Powershell:如何使用 Graph over Powershell 创建多个 PUTS?
- python - 根据各自的时区转换每一行的日期时间
- python - seaborn:无法将字符串转换为浮点数
- python-3.x - AWS 弹性 beantalk 的上传文件夹路径是什么?
- c# - 为 InvokeCommand 中的命令参数编写单元测试
- javascript - 动态分页列表
- ubuntu - cloud-init 无法在附加了 iso 的 ubuntu 中工作
- docusignapi - DocuSign 通过 API 创建信封,但未发送电子邮件
- redirect - 如果未使用 nextAuth 登录,如何在 NextJS 中重定向
- python - 我正在尝试使用 python 将英语数据集转换为英语