Исключение: нарушение прав на чтение. это -> ** p2 ** было 0xCCCCCCCC. произошло - PullRequest
0 голосов
/ 21 июня 2019

Я пишу консольный пошаговый боевик.Этот код компилируется без ошибок.Я пытаюсь создать экземпляр объекта для Player и один для Enemy, затем использовать врага * p2, чтобы получить его здоровье и т. Д. Сам указатель, кажется, вызывает проблему при запуске программы, вызывая исключение.

class Unit
{
public:
    //default constructor and destructor
    Unit();
    virtual ~Unit();
    //interfaces
    virtual int attack() = 0;
    virtual void cast() = 0;

    void takeDamage(int);
    bool isAlive();
    //getters here
    virtual inline const string getName() const { return m_Name; }
    virtual inline int getHealth() const { return m_Health; }
protected:
    string m_Name;
    int m_Health;
};

class Player : public Unit
{
public:

    Player(void);
    virtual ~Player();

    void AddExperience();
    int attack(Unit* target);
    int getDamage();
private:
    int level;
    int experience;
    int actionsLeft;
};

class Enemy : public Unit
{

public:
    Enemy();
    virtual ~Enemy();
    int getExperience() const;
    int attack(Player* player);
    void msgDeath();
    void initialiseEnemy(int damage, int health);
protected:
    int m_xp;
    int m_damage;

};

//Game.h
    class Game
    {
    public:
        void playGame();
        void playerActionMenu();
    protected:
        Player *p1;
        Enemy *p2;
    };


//Game.cpp
void Game::playerActionMenu()
{
    p2->initialiseEnemy(15, 60);
    cout << "\n Enemy has " << p2->getHealth() << " health.";
    int choice = 0;
    cout << "Choose your move:" << endl
        << "1) Attack" << endl
        << "2) Assume defensive position." << endl;
    cin >> choice;
    switch (choice)
    {
    case 1:
        p1->attack(p2);
    }
    cout << "\nEnemy now has "<<p2->getHealth();
}

Класс Unit является базовым классом, а Enemy и Player являются его производными.Логика заключается в том, что когда игрок атакует, он должен взять вражеский объект в качестве своей цели, затем получить доступ к здоровью этого объекта и уменьшить его количество.

Пожалуйста, помогите мне.Что вызывает ошибку?Кроме того, как вы думаете, что-то не так с тем, как я справился с полиморфизмом?

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