내 tic tac 발가락 게임의 경우 기본 클래스 Player와 두 파생 클래스 인 HumanPlayer 및 AIPlayer가 있습니다. 처음 클래스를 만들었을 때 HumanPlayer 클래스를 하나의 .h 파일로 작성했습니다. 이제 구현 및 헤더 파일을 분리 한 이후 Dev C++에서 오류가 발생합니다. "{ 'token"앞에 예상 클래스 이름이 있습니다.C++이 파생 클래스에서 오류가 발생하는 이유
문제를 찾을 수 없습니다.
여기는 HumanPlayer 클래스와 기본 클래스 Player입니다. 어쩌면 누군가가 문제를 발견 할 수 있습니다. 헤더 HumanPlayer.h 클래스 플레이어의 정의를 포함한다 Player.h
#pragma once // include guard
#include "Board.h"
class Player
{
public:
virtual void makeAMove(Board &myBoard) = 0; // will accept pointer to board object as param
};
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";
}
}
}
보드 헤더에 이들 중 하나가 포함되어 있습니까? 이 두 헤더는 모두 '이사회 (Board)'의 선언 만 필요합니다. 어느 누구도 완전한 정의가 필요하지 않습니다. – chris
HumanPlayer는 Player의 정의를 어떻게 얻습니까? – PlasmaHH