2013-11-17 5 views
0

Итак, у меня есть структура героя, которая содержит имя, здоровье и атаку. Я разрешаю пользователю вводить количество героев, которые они хотят создать, и создать массив из многих героев (у меня также были проблемы, позволяющие пользователю определять размер массива, поэтому проблема может быть там). При попытке установить атрибуты с помощью цикла массива, я получаю сообщение об ошибке: IntelliSense: оператор «[]» не соответствует этим операндам. Типы операндов: Герой [int]Отображение массива ошибок структуры/класса C++

Мой вопрос: как мне пройти через массив структур, чтобы установить их атрибуты, и если да, отобразится ли информация героя с помощью функции отображения?

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; 
} 

ответ

2
Hero heroList[x]; 

Удалить эту линию хорошо. нет необходимости в этом.

+0

Это ошибка на самом деле. – CroCo

+0

. Снятие это работа. или вы получили ошибку времени выполнения? – hasan83

+0

Это сработало и позволило мне пройти! Спасибо! – user1368970

1

Единственная проблема, с которой вы столкнетесь после удаления линии предложенной (Hero heroList[x]) является то, что все объекты, созданные героя не инициализируется (если вы назвали new Hero[num] вы только выделили массив и создали неявный конструктор по умолчанию для каждого из них) ,

Для того, чтобы INIT все из них, вы должны либо использовать все свои «сеттеры», или написать конструктор не по умолчанию, а затем только выделить массив из Hero* PTRS, а когда цикл через него инициализации каждый PTR к new Hero(.....) с параметрами, которые вы хотите.

Надеюсь, что это поможет прояснить ситуацию.

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(); 
    } 
Смежные вопросы