2013-12-15 2 views
0

내 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"; 
     } 
    } 
} 
+0

보드 헤더에 이들 중 하나가 포함되어 있습니까? 이 두 헤더는 모두 '이사회 (Board)'의 선언 만 필요합니다. 어느 누구도 완전한 정의가 필요하지 않습니다. – chris

+2

HumanPlayer는 Player의 정의를 어떻게 얻습니까? – PlasmaHH

답변

2

나는 볼 수 없습니다.

+0

오케이. HumanHeader.h 파일에 Player.h를 포함 시켰습니다. 이제 컴파일됩니다. HumanPlayer.h 파일 만 있고 HumanPlayer.cpp가 없을 때이 include가 필요하지 않았습니다. 도와 주셔서 감사합니다. – navig8tr

+0

이 대답을 수락해야합니다. – asifgoldpk

관련 문제