2009-04-18 4 views
0

Eclipse/C++에서 명백하게 링커 오류 ("정의되지 않은 참조")가 발생하는 데 문제가 있습니다. 아래에 표시된 모든 클래스는 "정의되지 않은 참조"오류 (아래 참조)를 제공하는 PlayGame.cpp를 제외하고는 정상적으로 컴파일됩니다.C++/Eclipse 정의되지 않은 참조 질문

다음은 관련 클래스 및 코드입니다.

PlayerFactory.h

PlayerFactory.cpp가

Game.h

Game.cpp

// constructor for game: 

Game::Game (const PlayerFactory& factory) 

{ 

     cout << " constructor" << endl; 

} 

PlayGame.cpp

// start of code for game where error occurs 

#include "Game.h" 

#include "PlayerFactory.h" 

int main() { 
    try 

    { 

     PlayerFactory factory; 

     Game game (factory); <== undefined reference error 
     ... 

상기 라인 준다 이자형 rror "Game (PlayerFactory const &)에 대한 정의되지 않은 참조" "

이 오류의 원인과 해결 방법은 무엇입니까?

+0

는 질문 코드 –

답변

1

class 선언의 기본 표시 여부는 비공개입니다. 따라서 PlayerPlayerFactory 클래스의 모든 구성원 함수는 private이며 클라이언트는 액세스 할 수 없습니다. 당신은 그들을 공개해야합니다.

Player.h

#ifndef PLAYER_H 
#define PLAYER_H 
class Player 
{ 
public: 
    virtual ~Player() { 
     cout << "Player destructor called" << endl; 

    } 
    virtual void Player::PlayerMakeMove(){ 
     cout << "make move" << endl; 
    } 


}; 
#endif // PLAYER_H 

PlayerFactory.h는

#ifndef PLAYERFACTORY_H 
#define PLAYERFACTORY_H 
class PlayerFactory 
{ 
public: 
    virtual ~PlayerFactory() { 
     cout << "PlayerFactory destructor called" << endl; 
    } 

    virtual std::auto_ptr<Player> PlayerFactory::MakePlayerX() const{ 

     return PlayerFactory::MakePlayer('x'); 
    } 

    virtual std::auto_ptr<Player> PlayerFactory::MakePlayerO() const{ 
     return PlayerFactory::MakePlayer('o'); 

    } 

    std::auto_ptr<Player> PlayerFactory::MakePlayer (char letter) const{ 
     auto_ptr<Player> pt(new Player()); 
     return pt; 
    } 
}; 
#endif // PLAYERFACTORY_H 

는 또한, Game::Play()return 문을 부족합니다.

Outcome Game::Play() { 
    cout << " play" << endl; 
    return PlayerXWon; 
} 

필요한 헤더, 앞으로 선언과 필요에 따라 using 문을 추가 수행 (내가 여기를 건너).

+0

조금 더 나은하지 특히 ​​서식을 시도하시기 바랍니다. 즉, 관리되는 프로젝트입니다. 이 일이 내가해야 할 일인가? 그렇다면, 어떻게 생각하십니까? 고마워. –

+0

makefile 대상에 언급 된 모든 cpp 파일이 있습니까? 또는 * .cpp 조치조차도 마찬가지입니다. PlayerFactory에 해당하는 obj 파일이 생성되고 obj가 기본 실행 파일에 링크되어 있는지 확인하십시오. – dirkgently

+0

난 그냥 메이크 파일 주위에 찌르지 만, 그것은 모두 자동 생성 된 상용구 코드를 참조 개체 변수. 검색 결과에서 관리되는 make 옵션을 사용하는 경우 Eclipse에 자동으로 소스 파일이 포함 된 것처럼 보입니다. 나는 지금까지 행운을 비 겼어. –

1

어떤 이유로 든 링커는 컴파일러의 구현 을 찾지 못합니다. 따라서 컴파일러가 생성되지 않는다고 강하게 나타납니다.

몇 가지 디버깅 단계 :

  • 시도는 GCC에 의해 생성 얻을 .OBJ 파일을 찾을 수 있습니다. Game.obj 을 찾을 수 있는지 확인하십시오.

  • 항상 거기, 출력은

  • 더 간단한 방법이없는 경우 GCC

    에 대해 생성하는 명령 줄을 IDE를 얻을 수있는 방법을 찾기 :

    • 그것으로 GCC를 대체하는 스크립트를 확인, 스크립트가 명령 행 을 파일에 작성하여 검사하도록하십시오.