所以,我有一个包含名字,健康和攻击的英雄结构。我允许用户输入他们想要创建的英雄数量,并创建一个由众多英雄组成的数组(我也有问题允许用户确定数组大小,所以问题可能存在)。当尝试使用数组的循环设置属性时,我收到一个错误:IntelliSense:没有运算符“[]”匹配这些操作数。操作数类型是:Hero [int]
我的问题是,我如何遍历结构数组来设置它们的属性?如果是这样,显示英雄的信息与显示功能类似?
struct Hero
{
private:
string hName;
int hHealth;
int hAttack;
public:
void displayHeroData();
void setName(string);
void setHealth(int);
void setAttack(int);
};
void Hero::displayHeroData()
{
cout << "\n\n\n\nHERO INFO:\n" << endl;
cout << "Name: " << hName << endl;
cout << "Health: " << hHealth << endl;
cout << "Attack: " << hAttack << endl;
};
void Hero::setName(string name)
{
hName = name;
}
void Hero::setHealth(int health)
{
if(health > 0)
hHealth = health;
else
hHealth = 100;
}
void Hero::setAttack(int attack)
{
if(attack > 0)
hAttack = attack;
else
hAttack = 100;
}
int main()
{
string name;
int health;
int attack;
int num;
Hero *heroList; //declaring array
//getting size of array
cout << "How many hero's do you want to create? (greater than 0)" <<endl;
cin >> num;
heroList = new Hero[num]; //this is the array of Heroes
//looping through the array
for(int x = 0; x < num; ++x){
//creating a new hero, I think???
Hero heroList[x];
//setting hero's name
cout << "What is hero" << x <<"'s name?" << endl;
cin >> name;
heroList[x].setName(name);
//display the character after attributes have been set
heroList[x].displayCharacterData();
}//end of for loop
return 0;
}
答案 0 :(得分:2)
Hero heroList[x];
删除此行以获得良好效果。不需要它。
答案 1 :(得分:1)
在删除建议的行(Hero heroList[x]
)之后,您将遇到的唯一问题是所有创建的英雄对象都未初始化(当您调用new Hero[num]
时,您只分配了数组并创建了每个默认的隐式构造函数。)
为了初始化所有这些,你必须使用所有的“setter”,或者编写一个非默认的构造函数,然后只分配一个Hero*
ptrs的数组,并在循环遍历它时每个ptr使用您希望的参数到new Hero(.....)
。
希望有助于澄清事情。
答案 2 :(得分:1)
在循环中,只需执行以下操作
//looping through the array
for(int x = 0; x < num; ++x)
{
cout << "What is hero" << x <<"'s name?" << endl;
cin >> name;
heroList[x].setName(name);
}
for(int x = 0; x < num; ++x)
{
heroList[x].displayHeroData();
}