2012-01-29 2 views
3

현재 RPG 게임을 만들려고하고 있는데 문제가 있습니다. 이것은 제가 지금까지 가지고있는 레이아웃입니다.프로그램에 포함 레이아웃을 어떻게 설정해야합니까?

클래스 :

  • 배우 - 기본 클래스 아무것도 등
  • 단위 단위, 발사체로 '존재한다'고 - 상속 배우, 모든 단위 기준.
  • 게임 - 게임에는 단일 인스턴스 만 있고 게임의 모든 개체에 대한 포인터가 포함됩니다. 0.1 초마다 모든 액터에서 가상 기능 gameTick을 호출 할 계획입니다.

문제는 모든 액터에 Game 인스턴스에 대한 포인터가 있어야한다는 것입니다. 반지름이 500에 해당하는 주문을 원한다면 게임에서 해당 범위 내의 모든 유닛 포인터를 찾아 돌려 주길 원합니다.

제 문제는 액터의 헤더 파일에 게임을 포함 시키면 프로그램이 컴파일되지 않습니다. 내 배우가 게임에 액세스하려면 어떻게해야합니까? 아니면 잘못된 방향으로 가고 있습니까?

미리 감사드립니다. 대신 일을

// START main.cpp 

#include <iostream> 
#include "game.h" 

int main() 
{ 
    std::cout << "All done\n"; 

    return 0; 
} 

// END main.cpp 



// START actor.h 

#ifndef __ACTOR_H_ 
#define __ACTOR_H_ 

#include <iostream> 

//#include "game.h" Causes many errors if uncommented 

class Actor 
{ 
public: 
    Actor(); 

    std::string name_; 
}; 

#endif 

// END actor.h 



// START actor.cpp 

#include "actor.h" 

Actor::Actor() 
{ 
    name_ = "Actor class"; 
} 
// END actor.cpp 



// START unit.h 

#ifndef __UNIT_H_ 
#define __UNIT_H_ 

#include "actor.h" 

class Unit : public Actor 
{ 
public: 
    Unit(); 
}; 

#endif 

// END unit.h 



// START unit.cpp 

#include "unit.h" 

Unit::Unit() 
{ 
    name_ = "Unit class"; 
} 

// END unit.cpp 



// START game.h 

#ifndef __GAME_H_ 
#define __GAME_H_ 

#include <vector> 

#include "unit.h" 

class Game 
{ 
public: 
    std::vector< Actor * > actors_; 
    std::vector< Unit * > units_; 
}; 

#endif 

// END game.h 
+0

인터페이스에 종속성 문제를 해결하기 위해 몇 가지 문제를 해결하는 것에 대해 어떻게 생각합니까? 순환 종속성과 관련하여 발생하는 오류를 가정합니다. –

+0

unit.h에는 actor.h가 포함되어 있으며 actor.h에는 game.h가 포함되어 있으며 game.h에는 unit.h / – Dan

답변

2

:

#include "actor.h" 
#include "unit.h" 

단순히 앞으로 두 클래스 선언 할 수 있습니다 : 당신은 단지 포인터를 사용하고 있기 때문에

class Actor; 
class Unit; 

컴파일러는 것을 알 필요가 type은 클래스이므로 다른 것을 알 필요가 없습니다. 이제 cpp 파일에서 #include을 수행해야합니다.

1

앞으로 선언하면 충분할 수 있습니다. 당신이 클래스의 객체를 인스턴스화 할 경우 FWD 선언이 충분하지 않습니다 유일한 상황

  • 입니다 : 컴파일러가 해당 개체가 공용 메서드에 액세스해야하는 경우
  • 구성 할 수있다 방법을 알 필요가있다/그 클래스의 속성들 : 컴파일러는 그 메소드들이 어떻게 작동하는지 또는 당신이 접근하려고 시도하고있는 어떤 타입의 속성을 알아야한다.

위의 두 가지 중 하나를 수행하지 않으면 순방향 선언으로 충분하지 않습니다.

관련 문제