Ошибка запуска карточной игры при попытке расширить методы из абстрактного базового класса на два других класса - PullRequest
0 голосов
/ 28 октября 2019

Я создал виртуальную военную игру в C ++, сейчас я пытаюсь реализовать какой-то художественный стиль, печатая изображения ascii каждой карты. Выводы хорошие, когда они отделены от основной программы, а сама игра работает нормально. Однако, когда я пытаюсь объединить их, вызывая метод в моем классе Art (draw pic), мой компилятор внезапно выдает какой-то большой положительный код ошибки.

Мой урок искусства начинается с моего игрового класса. У меня также есть класс Player, который тоже выходит из Game. Два метода, openFile и getFileContents, являются виртуальными в моем классе Game. В основном я создаю указатель на экземпляр Art и использую ->, чтобы попытаться вызвать методы рисования.

Это часть main, которая содержит проблемы ...

void startGame() {
Function functionObj;

vector<Card> deck = functionObj.makeDeck();

Art *instanceArt;

Player human;
human.setDeck(&deck);
human.setHand(functionObj.deal());

Player computer;
computer.setHand(functionObj.deal());
string nextRound;

// Displays title screen
human.openFile(1,1);

cout << "Hello, " << human.updateName() << ". Let's play a game." << endl;

// While either player still has cards (i.e. game ends when one player out of cards)
while (!human.getHand().empty() && !computer.getHand().empty()) {

    // Show two cards from user and computer
    cout << "You drew: " << human.getHand()[0].rankToString() << " of " << human.getHand()[0].suitToString() << endl;
    instanceArt->openFile(human.getHand()[0].getSuit(), human.getHand()[0].getRank()); // SHOULD PRINT CARD DIAGRAM BUT CRASHES

    cout << "Computer drew: " << computer.getHand()[0].rankToString() << " of " << computer.getHand()[0].suitToString() << endl;
    instanceArt->openFile(computer.getHand()[0].getSuit(), computer.getHand()[0].getRank()); // SHOULD PRINT CARD DIAGRAM BUT CRASHES

Это мой Game.h, это мой базовый абстрактный класс

class Game {
protected:
    vector<Card> deck;
    vector<Card> hand;
public:
    virtual std::string updateName() const = 0;

    virtual int openFile(int gameSuit, int rank) const = 0;
    virtual std::string getFileContents(ifstream& File) const = 0;

    void setDeck(vector<Card> *givenDeck);
};

Это мой Player.h, он расширяет Game

class Player : public Game {
public:
    std::string updateName() const override;

    vector<Card> getHand();

    void setHand(vector<Card> givenHand);

    int openFile(int any, int thing) const override;
    std::string getFileContents(ifstream& File) const override;
};

Наконец, это мой Art.h, это тоже расширяет Game

    class Art : public Game {
public:
    virtual int openFile(int gameSuit, int rank) const override;
    virtual std::string getFileContents(ifstream& File) const override;
};

Я хотел бы попытаться исправить проблему, не слишком меняя классы, потому что это для задания, и я более или менее просто пытаюсь продемонстрировать полиморфизм и наследование. Большое спасибо заранее!

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