Необработанное исключение при чтении структур - PullRequest
0 голосов
/ 27 марта 2011

Программа выдает необработанное исключение в этой строке:

}else if(s == "backpack"){
    cout << "\nEquipped items: " << endl;
    cout << weapon->Name << endl << cArmour->Name << endl; //this line

Печатает «Оборудованные предметы:», затем выдает исключение.Этот файл - Player.h - включает Library.h, который, в свою очередь, включает Globals.h, который имеет структуру:

struct sWeapon{
    std::string Name;
    int Damage;
};

struct sArmour{
    std::string Name;
    int AP;
};

В конструкторе Player он создает объекты структуры:

Player::Player(std::map<std::string,sWeapon*> wepArray,std::map<std::string,sArmour*> armArray){

    weapons = wepArray;
    armour = armArray;

    weapon = wepArray["None"];
    cArmour = armArray["None"];
}

В начале всей программы она вызывает init_weapons и init_armour:

int main(){
    using namespace std;

    //initialise the game
    std::map<std::string,sWeapon*> wepArray = init_weapons(); //get weapon array
    std::map<std::string,sArmour*>armArray = init_armour(); //get armour array

, которые возвращают карту всего оружия:

//init_weapons()
//sets up weapons map
std::map<std::string,sWeapon*> init_weapons(void){
    std::map< std::string, sWeapon* > weapons; //map of weapons

    //starting 'none'
    sWeapon* none = new sWeapon();
    none->Name = "None";
    none->Damage = 0;

    //create weapons
    sWeapon* w1 = new sWeapon();
    w1->Name = "Rusty dagger";
    w1->Damage = 3;

    //put in map
    weapons[w1->Name] = w1;
    return weapons;
}

std::map<std::string,sArmour*> init_armour(void){
    std::map< std::string, sArmour* > armour; //map of armour

    //starting 'none'
    sArmour* none = new sArmour();
    none->Name = "None";
    none->AP = 0;

    //create armour
    sArmour* a1 = new sArmour();
    a1->Name = "Leather";
    a1->AP = 10;

    //put in map
    armour[a1->Name] = a1;
    return armour;
}

, затем передает эти карты какАргументы конструктора плеера показаны выше.

1 Ответ

2 голосов
/ 27 марта 2011

Я предполагаю, что либо weapon, либо cArmour равно нулю или указывает никуда.

Это более вероятно, поскольку вы не храните свое оружие и броню "Нет" в глобальном хэше.

Попробуйте распечатать указатель для этих двух объектов «None», а затем значения указателя для членов объекта weapon или cArmour.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...