C++编译报错Data initializer is not allowed here如何解决?
问题原因及解决方案
该编译报错是由于使用的编译器默认遵循C03及更早的C标准导致的:旧版本C++标准不允许在结构体/类的定义中直接对非静态成员变量做默认初始化,仅静态常量整型成员支持这类写法。
你可以选择以下任意一种方法解决:
- 方法1:开启C11及更高版本标准支持
目前绝大多数主流编译器(GCC 4.8+、Clang 3.3+、Visual Studio 2012+)都支持C11及以上标准,你只需要在编译参数中开启对应标准即可:
GCC/Clang 环境添加编译参数-std=c++11,也可根据需求选择更高版本如-std=c++17、-std=c++20;Visual Studio可以在项目属性的「C/C++ -> 语言 -> C++语言标准」中选择对应版本,修改后你现有代码无需调整即可正常编译。 - 方法2:兼容旧C标准的写法
如果需要兼容C03及更早的标准,可以将成员初始化逻辑移到构造函数中实现,示例代码如下:
(使用初始化列表写法,性能更优)
也可选择在构造函数内部直接赋值:struct example { int a; example() : a(0) // 在构造函数初始化列表完成成员初始化 {} };struct example { int a; example() { a = 0; } };
内容的提问来源于stack exchange,提问作者raghu121
相关产品推荐
相关产品推荐

