В моей игре TicTacToe у меня проблемы с виртуальными функциями. Следующий код генерирует ошибку в Dev C++: «class std :: auto_ptr» не имеет имени с именем «makeAMove».Как получить доступ к объекту, на который указывает std :: auto_ptr
Согласно ошибке, проблема имеет какое-то отношение к функции makeAMove, но я не могу посмотрите, что случилось. Кроме того, я должен упомянуть, что я использую устаревшую функцию auto_ptr вместо unique_ptr, потому что, по-видимому, помощь преподавателя, сортирующая мой код, не имеет компилятора, совместимого с C++ 11.
Прямо сейчас и playGame, и makeAMove функции don не делайте ничего, но я хочу выяснить, что вызывает ошибку, прежде чем продолжить.
Благодарим за любые предложения.
Вот соответствующий код:
Game.h (действует как контроллер для игры)
#include "Player.h"
#include "AIPlayer.h"
#include "HumanPlayer.h"
#include <memory>
class Game
{
public:
Game(unsigned int players)
{
if (players == 1)
{
player1.reset (new HumanPlayer());
player2.reset (new AIPlayer());
}
else
{
player1.reset (new HumanPlayer());
player2.reset (new HumanPlayer());
}
}
void playGame()
{
player1.makeAMove();
}
private:
std::auto_ptr<Player> player1; // pointer to a Player object (C++11 has more secure unique_ptr)
std::auto_ptr<Player> player2; // pointer to a Player object
};
Player.h (базовый класс для обоих HumanPlayer.h и AIPlayer.h)
class Player
{
public:
virtual void makeAMove() = 0; // will accept pointer to board object as param
};
HumanPlayer.h
class HumanPlayer : public Player
{
public:
virtual void makeAMove()
{
// do some work
}
};
AIPlayer.h
#pragma once // include guard
#include "Player.h"
class AIPlayer : public Player
{
public:
virtual void makeAMove()
{
// do some work
}
};
main.cpp
#include <iostream>
#include "Game.h"
int main()
{
Game myGame(1);
myGame.playGame();
return 0;
}
'player1-> makeAMove();' достаточно, не нужно явно вызывать 'get()' в этом случае. –