在我的TicTacToe游戏中,我在使用虚拟功能时遇到了一些麻烦。以下代码在Dev C ++中引发错误:“ class std :: auto_ptr'没有名为'makeAMove'的成员。

根据错误,该问题与makeAMove函数有关,但我看不到出了什么问题。另外,我应该指出,我使用的是不推荐使用的auto_ptr函数,而不是unique_ptr函数,因为显然,对我的代码进行评分的老师的帮助没有兼容C ++ 11的编译器。

目前,playGame和makeAMove函数均不执行任何操作,但是我想在继续之前弄清楚是什么导致了错误。

感谢您的任何建议。

以下是相关代码:

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


人类播放器

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

最佳答案

请记住,auto_ptr的行为就像一个指针,因此必须取消引用(使用operator*operator->)。

08-17 03:27