C++ C++;为什么这个派生类会出错

C++ C++;为什么这个派生类会出错,c++,C++,对于我的tic tac toe游戏,我有一个基本类玩家和两个派生类HumanPlayer和AIPlayer。当我第一次创建类时,我在一个.h文件中编写了HumanPlayer类。现在,由于我已经分离了实现和头文件,我在devc++中遇到了一个错误:“在“{”标记之前应该有类名” 我似乎找不到问题所在 这是HumanPlayer类和基本类的玩家。也许有人能发现问题。 Player.h HumanPlayer.h #pragma once // include guard #include "Boa

对于我的tic tac toe游戏,我有一个基本类玩家和两个派生类HumanPlayer和AIPlayer。当我第一次创建类时,我在一个.h文件中编写了HumanPlayer类。现在,由于我已经分离了实现和头文件,我在devc++中遇到了一个错误:“在“{”标记之前应该有类名”

我似乎找不到问题所在

这是HumanPlayer类和基本类的玩家。也许有人能发现问题。 Player.h

HumanPlayer.h

#pragma once // include guard
#include "Board.h"

class HumanPlayer: public Player
{
    public:
        HumanPlayer(char token);
        virtual void makeAMove(Board &myBoard); 

    private:
        char token;
        int askForRow();    
        int askForColumn();
};
HumanPlayer.cpp

#include "HumanPlayer.h"
#include <cstdlib> // atoi

HumanPlayer::HumanPlayer(char token)
{
    this->token = token;
}

void HumanPlayer::makeAMove(Board &myBoard) 
{
    bool done = false;
    do 
    {
        int row = askForRow();

        int column = askForColumn();

        if (myBoard.getCell(row, column) == ' ')
        { 
            myBoard.setCell(row, column, token);
            done = true;
        }
        else
            std::cout << "This cell is already occupied. Try a different cell" << std::endl;
    }
    while (!done);
}

int HumanPlayer::askForRow()
{
    while(true)
    {
        std::cout << "Enter a row (0, 1, 2) for player " << token << ": ";
        std::string row_s; 
        std::getline(std::cin, row_s);
        if (row_s == "0" || row_s == "1" || row_s == "2")
        {
            return atoi(row_s.c_str());
        }
        else
        {
            std::cout << "\nInvalid input\n";
        }
    }
}

int HumanPlayer::askForColumn()
{
    while(true)
    {
        std::cout << "Enter a column (0, 1, 2) for player " << token << ": ";
        std::string column_s; 
        std::getline(std::cin, column_s);
        if (column_s == "0" || column_s == "1" || column_s == "2")
        {
            return atoi(column_s.c_str());
        }
        else
        {
            std::cout << "\nInvalid input\n";
        }
    }
}
#包括“HumanPlayer.h”
#包括//atoi
HumanPlayer::HumanPlayer(字符令牌)
{
此->令牌=令牌;
}
void HumanPlayer::makeAMove(Board和myBoard)
{
bool done=false;
做
{
int row=askForRow();
int column=askForColumn();
if(myBoard.getCell(行、列)='')
{ 
设置单元(行、列、令牌);
完成=正确;
}
其他的

std::cout我看不到标题HumanPlayer.h在哪里包括类Player的定义。

董事会标题是否包括其中任何一个?这两个标题都只需要一个
董事会的前向声明。它们都不需要完整的定义。HumanPlayer如何获得Player的定义?好的。我在HumanPl中包括Player.h现在它可以编译了。当我只有HumanPlayer.h文件而没有HumanPlayer.cpp时,没有必要包含这个文件。谢谢你的帮助。
#include "HumanPlayer.h"
#include <cstdlib> // atoi

HumanPlayer::HumanPlayer(char token)
{
    this->token = token;
}

void HumanPlayer::makeAMove(Board &myBoard) 
{
    bool done = false;
    do 
    {
        int row = askForRow();

        int column = askForColumn();

        if (myBoard.getCell(row, column) == ' ')
        { 
            myBoard.setCell(row, column, token);
            done = true;
        }
        else
            std::cout << "This cell is already occupied. Try a different cell" << std::endl;
    }
    while (!done);
}

int HumanPlayer::askForRow()
{
    while(true)
    {
        std::cout << "Enter a row (0, 1, 2) for player " << token << ": ";
        std::string row_s; 
        std::getline(std::cin, row_s);
        if (row_s == "0" || row_s == "1" || row_s == "2")
        {
            return atoi(row_s.c_str());
        }
        else
        {
            std::cout << "\nInvalid input\n";
        }
    }
}

int HumanPlayer::askForColumn()
{
    while(true)
    {
        std::cout << "Enter a column (0, 1, 2) for player " << token << ": ";
        std::string column_s; 
        std::getline(std::cin, column_s);
        if (column_s == "0" || column_s == "1" || column_s == "2")
        {
            return atoi(column_s.c_str());
        }
        else
        {
            std::cout << "\nInvalid input\n";
        }
    }
}