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
相关产品推荐
相关产品推荐

