You need to enable JavaScript to run this app. C++编译报错Data initializer is not allowed here如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

C++编译报错Data initializer is not allowed here如何解决?

问题原因及解决方案

该编译报错是由于使用的编译器默认遵循C03及更早的C标准导致的:旧版本C++标准不允许在结构体/类的定义中直接对非静态成员变量做默认初始化,仅静态常量整型成员支持这类写法。

你可以选择以下任意一种方法解决:

  • 方法1:开启C11及更高版本标准支持
    目前绝大多数主流编译器(GCC 4.8+、Clang 3.3+、Visual Studio 2012+)都支持C
    11及以上标准,你只需要在编译参数中开启对应标准即可:
    GCC/Clang 环境添加编译参数 -std=c++11,也可根据需求选择更高版本如-std=c++17、-std=c++20;Visual Studio可以在项目属性的「C/C++ -> 语言 -> C++语言标准」中选择对应版本,修改后你现有代码无需调整即可正常编译。
  • 方法2:兼容旧C标准的写法
    如果需要兼容C
    03及更早的标准,可以将成员初始化逻辑移到构造函数中实现,示例代码如下:
    (使用初始化列表写法,性能更优)
    struct example
    {
        int a;
        example() : a(0) // 在构造函数初始化列表完成成员初始化
        {}
    };
    
    也可选择在构造函数内部直接赋值:
    struct example
    {
        int a;
        example()
        {
            a = 0;
        }
    };
    

内容的提问来源于stack exchange,提问作者raghu121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 15:54:04