显示结构/类错误C ++的数组

时间:2013-11-17 20:28:32

标签: c++ arrays class loops struct

所以,我有一个包含名字,健康和攻击的英雄结构。我允许用户输入他们想要创建的英雄数量,并创建一个由众多英雄组成的数组(我也有问题允许用户确定数组大小,所以问题可能存在)。当尝试使用数组的循环设置属性时,我收到一个错误: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;
}

3 个答案:

答案 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();
    }