2012-06-28 1 views
0

Je travaille avec OpenGL et DirectX, et j'ai commencé à développer les bases pour les classes de jeu orientées objet. La structure des classes en cours est la suivante:C++ Forward Declaration (Pointer) - Membre d'accès

objet
--- | --- Acteur
--------- | --- Pawn
------- - | --- Contrôleur

J'ai donc la classe Pawn et Controller qui hérite Actor qui hérite de Object.

Le problème est que j'ai besoin d'avoir une référence de Controller dans la classe pawn et une instance de Pawn dans la classe de contrôleur.
En raison de cela, je l'avant et a déclaré PawnController dans Actor.h:

// Actor.h 

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

class Pawn; 
class Controller; 

Et puis dans Pawn.h:

// Pawn.h 

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

Tout cela est bon, aucune erreur et tout. Le problème est quand je veux accéder aux membres de cette classe:

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

Alors, que dois-je faire pour être en mesure d'avoir un pointeur de contrôleur en gage et un pointeur vers un pion dans mon contrôleur de les maintenir en différents fichiers (.h et .cpp) et en même temps pouvoir accéder à ses membres?

Nous vous remercions de votre temps. : D

[si plus d'information est nécessaire, je vais fournir ce]

+4

Juste '#include" Controler.h "' dans Pawn.cpp. –

+1

Ce n'est pas un problème. Pawn.cpp n'est pas inclus par Pawn.h. J'espère. –

+0

Je vois ce que vous voulez dire, comment je ne me souviens pas que je peux inclure des fichiers. H dans .cpp * Extreme Face Palm * – zeluisping

Répondre

4

déclaration Forward dit au compilateur que type donné sera fourni plus loin. Le compilateur n'a aucune idée sur les champs ou les membres de ce type. Par conséquent, vous devez inclure le fichier .h correspondant dans votre fichier .cpp (l'endroit où vous accédez aux membres de la classe "controller").