2012-06-28 2 views
0

Я работаю с OpenGL и DirectX, и я начал разрабатывать основы для объектно-ориентированных игровых классов. Структура текущих классов выглядит следующим образом:C++ Forward Declaration (Pointer) - член доступа

Объект
--- | --- Актер
--------- | --- Пешка
------- - | --- Контроллер

Итак, у меня есть классы Pawn и Controller, которые наследуют Actor, который наследует Object.

Проблема в том, что мне нужно иметь ссылку Controller в классе пешки и экземпляр Pawn в классе контроллера.
Из-за этого я жду объявленная Pawn и Controller в Actor.h:

// Actor.h 

// (...) Actor Declaration (...) 

class Pawn; 
class Controller; 

А потом в Pawn.h:

// Pawn.h 

class Pawn : public Actor 
{ 
private: 
    Controller* controller; 
public: 
    void DoSomethingWithController(void); 
} 

Это все хорошо, никаких ошибок и все. Проблема заключается в том, когда я хочу, чтобы получить доступ к членам в этом классе:

void Pawn::DoSomethingWithController(void) 
{ 
    // this->controller-> can't access members like this (members not found) 
} 

Итак, что я должен сделать, чтобы быть в состоянии иметь указатель контроллера в пешки и указатель на пешки в моем контроллере, сохраняя их в разные файлы (.h и .cpp) и в то же время возможность доступа к своим членам?

Спасибо за ваше время. : D

[если требуется больше информации, я приведу его]

+4

Просто '#include" Controler.h "в Pawn.cpp. –

+1

Это не проблема. Pawn.cpp не включен Pawn.h. Я надеюсь. –

+0

Я понимаю, что вы имеете в виду, как я не помню, что могу включать файлы .h в .cpp * крайняя ладонь лица * – zeluisping

ответ

4

вперед декларация говорит компилятору, что будет предоставлен данный тип дополнительно. Компилятор не имеет понятия о полях или членах этого типа. Поэтому вам нужно включить соответствующий .h-файл в ваш .cpp-файл (место доступа к членам класса «controller»).