VS C++编译器报错C2864:结构体成员类内初始化问题求助
解决Visual Studio C++结构体成员初始化错误的问题
这问题我之前维护老项目时也碰到过,核心原因是不同编译器对C++标准特性的支持时机不一样:你用的LLVM编译器(比如Clang)默认支持C11及以后的类内非静态成员初始化特性,但你的Visual Studio编译器要么版本较老,要么项目没启用对应C标准,所以抛出了C2864错误——MSVC在未启用C++11+时,只允许静态const整数类型的成员在类内直接初始化。
下面给你两种靠谱的解决方法:
方法一:启用C++11及更高版本标准
这是最直接的根源解决办法,让VS编译器兼容你原本的代码写法:
- 打开你的Visual Studio项目,右键点击项目名称,选择「属性」
- 依次展开「配置属性」→「C/C++」→「语言」
- 在「C标准」下拉菜单中选择「ISO C11 标准(/std:c11)」或更高版本(比如C17、C++20)
- 点击「确定」后重新编译,你的原代码就能正常运行了
方法二:用构造函数初始化成员变量
如果你因为项目限制不能升级C标准,就把成员的初始化逻辑放到结构体的构造函数里,这是C98就支持的兼容写法:
struct element{ element* next; element* prev; char value; // 在构造函数中初始化指针成员 element() : next(NULL), prev(NULL) {} // 如果需要同时初始化value,可以重载构造函数 element(char val) : next(NULL), prev(NULL), value(val) {} };
两种方法都能解决你遇到的问题,优先推荐方法一,毕竟C++11及以后的标准带来了很多便利特性,启用后后续开发也更顺畅。
内容的提问来源于stack exchange,提问作者SuperMario
相关产品推荐
相关产品推荐

