c++ - C++ 中的变量对象名称
问题描述
我正在寻找一种通过 for 循环创建类对象的方法。作为参考,我正在尝试创建一类对象,用户输入将确定需要多少个对象。我在 for 循环中使用构造函数来执行此操作,但它要求对象名称是可变的。我尝试了很多方法,没有任何效果,包括向量。我从字面上开始使用 C++ 一天前,所以忽略凌乱的代码或愚蠢的错误,除非它们与问题相关,它是一个宠物项目。
// Enemy Names
string eNames[ENum]{};
// Enemy Initiatives
double eInits[ENum]{};
//Enemy Temp ID's
int eTempids[ENum]{};
// Enemy Names Vector
std::vector<EnemyClass> en(ENum);
if (ENum > 0) {
for(int i = 0; i < ENum; i++){
string name;
double init;
int tempid = i + PLAYER;
cout << "Enter Enemy " << i + 1 << "'s Name" << endl;
cin >> name;
cout << "Enter " << name << "'s Initiative" << endl;
cin >> init;
eNames[i] = name;
eInits[i] = init;
eTempids[i] = tempid;
EnemyClass en[i](string name, double init, int tempid);
};
}; // END of IF Statement
en[i] 是变量名。我要么收到一条错误消息,指出“'en' 作为函数数组的减速”或 'EnemyClass' 不是声明的函数,不知道如何使用它是我发现的另一个论坛帖子的尝试:
问题与我的相同,代码如下:
for (int count = 0; count < no_of_objects; count ++)
{
ClassName object_name[count]
}
答案代码:
std::vector<ClassName> objects (no_of_objects);
但这会在 stl_construct.h 文件中产生“未声明的函数”错误
解决方案
看看为什么可变长度数组不是 C++ 标准的一部分?了解为什么声明string eNames[ENum]
,double eInits[ENum]
并且int eTempids[ENum]
是错误的。使用向量,就像你对en
:std::vector<string> eNames(ENum)
和.std::vector<double> eInits(ENum)
std::vector<int> eTempids(ENum)
关于你的问题。分配是这样使用的:
en[i] = EnemyClass(name, init, tempid);
如果您声明空的敌人名称向量并就地填充它会更好:
std::vector<EnemyClass> en;
// ...
en.emplace_back(name, init, tempid);
PS 不要在 Stackoverflow 上学习 C++。从The Definitive C++ Book Guide and List开始阅读书籍
推荐阅读
- java - 如何在 JDA 中的不同游戏状态消息之间循环?
- ios - “24:00”字符串中的 DateFormatter 返回 Nil
- javascript - 如何在 RxJS 中根据点击连续采样数据?
- html - html/css:用括号括起来的输入元素的表格/网格
- python - 并行计算-将每个进程输出到文件
- python - 如何从 Python 3 中的循环函数返回
- windows - 如何从任务栏堆栈中禁用/删除“关闭所有 Windows”选项?
- swift - 如何在 SQLite 中正确定义自定义函数的闭包
- razor - 具有 N 个嵌套项模板且无数据绑定的 Blazor 组件
- sql-server - 有没有办法加入日历表以开始和结束另一个查询的日期?