Visual C++ 初始化enum class类型失败出现报错该如何解决
问题原因与解决方案
你遇到的编译错误由两个可复现的问题导致:
1. 结构体定义遗漏结束分号
C++要求struct、class、enum等自定义类型的定义末尾必须添加分号作为结束标记。你的代码中struct something的闭合大括号后未补充分号,会导致编译器语法解析错乱,直接触发C2238、C2059两类语法错误,解析异常后还会连锁触发FOO类型识别失败的C2653错误。
2. 未启用C++11及更高版本标准支持
enum class语法、类内成员默认初始化都是C++11版本新增的特性,MSVC默认可能未启用对应标准支持,即便修复语法问题也可能编译失败。
修复后可正常编译的完整代码:
enum class FOO { A,B,C }; struct something { FOO abc = FOO::A; }; // 此处补充分号 int main(){ something _something; return 0; }
MSVC开启C++标准支持操作步骤:
- 右键点击当前项目,打开「属性」面板
- 依次进入「配置属性」-「C/C++」-「语言」分类
- 将「C++ 语言标准」选项修改为
ISO C++11 标准 (/std:c++11)或更高版本(如C17、C20均可) - 重新生成项目即可完成编译
内容的提问来源于stack exchange,提问作者inpinseptipin
相关产品推荐
相关产品推荐

