2010-05-10 3 views
0

저는 간단한 스크래블 게임을 구현해야하는 대학 프로젝트에 참여하고 있습니다. C++ 초급 - 클래스 내부에서 클래스를 사용하는 데 문제가 있습니다.

은 내가 player 클래스 (A std::string 형태의 점수와 플레이어의 손을 포함하고, 이름과 숫자 ( int) 점수)를 포함하는 score 클래스 (이. Player 년대의

하나 회원-기능은 플레이어의 점수 객체를 반환 Score getScore()이다 그러나, 나는이 컴파일시에 다음과 같은 오류 얻을 :.

:

player.h(27) : error C2146: syntax error : missing ';' before identifier 'getScore' 
player.h(27) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
player.h(27) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
player.h(27) : warning C4183: 'getScore': missing return type; assumed to be a member function returning 'int' 
player.h(35) : error C2146: syntax error : missing ';' before identifier '_score' 
player.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
player.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

여기에 각각 라인 (27)과 (35),의를

Score getScore(); //defined as public 
(...) 
Score _score; //defined as private 

나는 컴파일러가 유효한 유형으로 Score을 인식하는 데 문제가 있다는 것을 알게되었지만 ... 왜? 나는 제대로 player.h의 시작 부분에 Score.h을 포함했다 :

Score(); //score.h 

//score.cpp 
Score::Score() 
{ 
    _name = ""; 
    _points = 0; 
} 

가 어떤 입력을 감상 할 수있다 :

#include "Score.h" 
#include "Deck.h" 
#include <string> 

내가 Score.h에 정의 Score에 대한 기본 생성자가!

요청으로 score.h 및 player.h가 : http://pastebin.com/3JzXP36i http://pastebin.com/y7sGVZ4A

+0

첫 번째 오류는 아마도 26 번 줄에 발생합니다. 오류 메시지는 "식별자 전에"나타냅니다. 조금 더 많은 코드를 포함 할 수 있습니다. 또한 생성자는 클래스 정의 내에서 선언되어야합니다. – WhirlWind

+0

나는 그렇게 생각하지 않는다. 반환 값으로 Score를 정의하려고 시도하기 때문에 그 오류가 발생한다. 나는 생성자를 올바르게 선언했다. 어떤 코드에 대한 제안 사항이 있습니까? –

+2

더 많은 코드를 붙여 넣어야합니다. 전체'score.h'와'player.h'의 첫 번째 줄 – pajton

답변

7

당신은 원형 포함있어

편집

시간에 대한

감사합니다,

시스코 문제 -이 경우 수정하기가 상대적으로 쉽습니다.

#include "Player.h"Score.h에서 제거하십시오.


Score 실제로 Player을 사용하는 경우 수행해야 할 것입니다 무엇에 대한 설명 및 토론을위한 this 질문을 참조하십시오. 당신이 얻고있는 컴파일러 오류로


, 즉 마이크로 소프트의 컴파일러 - 당신이 정신적으로 "정의되지 선언에 사용되는 유형"에 그들 모두를 번역하는 법을 배워야한다 정의되지 않은 유형의 사용을보고하는 방법입니다. Score.h Player.h을 포함하도록 노력하고, Player.hScore.h을 포함하려고 :

+0

+1 - @Joe가 될 것입니다. – ChrisBD

+0

해당 링크를 제공해 주셔서 감사합니다. –

3

귀하의 문제는 재귀가 포함입니다. Score 클래스는 Player 클래스를 실제로 사용하지 않는 것 같으므로 Score.h에서 #include "Player.h"을 제거하면 문제가 해결됩니다.

1

circular dependency problem : Score.hPlayer.h이고 Player.hScore.h입니다.

이 문제를 해결하려면 Player.h에있는 포함을 Score.h으로 삭제하고 점수 클래스에서 사용해야 할 경우 class Player;을 정의하십시오.

관련 문제