You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类内用普通成员变量定义string数组编译报错该如何解决

错误原因
  • 编译期长度限制:C++内置静态数组的长度必须是编译期可确定的常量,你使用类的非静态成员变量Attacks作为数组长度,非静态成员变量的值只有类实例化后才会确定,编译阶段无法识别,因此触发前两个编译错误。
  • 数组赋值限制:C++内置数组不支持直接通过初始化列表进行整体赋值操作,哪怕数组长度合法,直接使用=加花括号赋值也会触发第三个错误。
修复方案

使用STL提供的std::vector动态容器替换内置数组,std::vector支持动态调整长度,也支持初始化列表直接赋值,完全匹配你的需求。
修复后的可运行代码如下:

#include <iostream>
#include <vector>
#include <string>

class Chars
{
public:
    int Attacks;
    int Stm;
    std::string name;
    int Hp;
    std::vector<std::string> AtkNames;
};

int main()
{
    Chars Stats;
    Stats.Attacks = 5;
    Stats.Stm = 1050;
    Stats.name = "Barber";
    Stats.Hp = 73000;
    Stats.AtkNames = { "atk1", "atk2", "atk3", "atk4", "atk5" };

    // 可通过以下方式遍历验证攻击名
    for (int i = 0; i < Stats.Attacks; ++i) {
        std::cout << "攻击" << i+1 << "名称:" << Stats.AtkNames[i] << std::endl;
    }

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:15:03