[C++] include en boucle

include en boucle [C++] - C++ - Programmation

Marsh Posté le 05-08-2002 à 18:37:29    

Je suis en train de programmer un petit moteur 3D et je me heurte à un problème:
 
Voici mon code:
 
SceneManager.h :

Code :
  1. #ifndef _SCENE_MANAGER_H_
  2. #define _SCENE_MANAGER_H_
  3. #include "Object.h"
  4. class SceneManager
  5. {
  6. private:
  7. vector<Object *> m_ObjectsList;
  8. public:
  9. void AddObject(Object *Object);
  10. bool RemoveObject(Object *Object);
  11. };
  12. #endif


 
J'aimerais que toutes les instances de la classe Object puissent accéder au SceneManager donc j'ai écrit la classe Object comme ceci:
 
Object.h :

Code :
  1. #ifndef _OBJECT_H_
  2. #define _OBJECT_H_
  3. #include "SceneManager.h"
  4. class Object
  5. {
  6. private:
  7. SceneManager *m_SceneManager;
  8. public:
  9. Object(SceneManager *SceneManager);
  10. };
  11. #endif


 
Le problème, c'est que lorsque je veux compiler ça, Visual C++ me met pleins de petites erreurs de compilation, du genre "SceneManager.h : error C2065: 'Object' : undeclared identifier"
J'ai vu en faisant une recherche dans le forum qu'il suffisait de mettre l'include de SceneManager dans Object.cpp au lieu de le mettre dans Object.h . Mais bon, ça n'a pas l'air très propre, et j'aimerais savoir si il existe une autre solution pour que mes Object accède tous à SceneManager, même en changeant l'architecture de la classe Object ou de la classe SceneManager.

Reply

Marsh Posté le 05-08-2002 à 18:37:29   

Reply

Marsh Posté le 05-08-2002 à 20:50:39    

- regle 1, on n'inclut que ce qu'on a besoin
ici, tu n'as besoin que d'une forward declaration de Object dans Scenemanager.h
et une forward declaration de SceneManager dans Object.h
Une forward declaration de class ressemble a ca:

Code :
  1. class Object;


- Parfois tu cherches a obtenir "l'autosuffisance" de ton include (apres une indirection multiple par exemple) ce qui complete la regle numero 1 (mais ne la contredit pas), dans ce cas tu es autorisé a faire l'include mais n'enleve pas la forward declaration pour autant dans les deux fichiers comme ca tu n'as pas a te soucier de l'ordre de l'inclusion!
tu peux faire quelque comme ca:

Code :
  1. // Ici les inclusions (necessaires, n'en mets pas si tu as besoin d'un simple pointeur comme dans ton exemple)
  2. #include "Object.h"
  3. // Ici la forward declaration (necessaire si tu as déjà inclus object.h !)
  4. class Object;


 
A+
LeGreg

Reply

Marsh Posté le 05-08-2002 à 21:52:42    

Merci :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed