[C++][Résolu] Le compilateur semble ignorer une classe : pourquoi ?

Le compilateur semble ignorer une classe : pourquoi ? [C++][Résolu] - C++ - Programmation

Marsh Posté le 18-12-2007 à 15:23:08    

Bonjour ! J'ai un problème, probablement une bêtise, mais dont je ne vois vraiment pas la solution...
 
J'ai une classe Mouvement définie comme ceci :
 

Code :
  1. #ifndef _Mouvement_
  2. #define _Mouvement_
  3. #include "Camera.h"
  4. #include "Vector3f.h"
  5. #include "Matrice.h"
  6. #include "Forme3D.h"
  7. #include "Mouvement.h"
  8. class Mouvement
  9. {
  10. public:
  11. Vector3f pos, vue;
  12. int i1, j1; //position actuelle de l'objet
  13. int i, j; //position où remettre l'objet;
  14. bool endroit;
  15. Mouvement(Vector3f laPos, Vector3f laVue, int leI1, int leJ1, int leI, int leJ, bool lEndroit);
  16. Mouvement();
  17. };
  18. #endif


 
Et une classe Camera :
 

Code :
  1. #ifndef _Camera_
  2. #define _Camera_
  3. #include "Camera.h"
  4. #include "Mouvement.h"
  5. #include "Vector3f.h"
  6. #include "Matrice.h"
  7. #include "Forme3D.h"
  8. #include <QStack>
  9. #include <iostream>
  10. class Camera
  11. {
  12. public:
  13. Vector3f pos, vue, haut;
  14. Mouvement essai;
  15. float vitesse, distance, radians, pi;
  16. int nombrealeatoiredefinissantlemonde2;
  17. bool endroit;
  18. Camera(Matrice *m,float posx,float posy,int nombrealeatoiredefinissantlemonde);
  19. float pas(int temps);
  20. bool termine;
  21. int matriceX, matriceY;
  22. QStack<Mouvement> mouvements;
  23. void zoom(int delta,Matrice *mat2,forme3D ** nosformes,uint tex1,uint tex2,uint tex3, uint tex4, uint tex5,uint tex7,uint posdepart);
  24. void deplacer(int temps);
  25. void glisser(int temps, Matrice *mat2);
  26. void regarder();
  27. void rotation(int temps);
  28. void raz();
  29. int suivant(int i, int i1);
  30. int regard();
  31. int cibleX();
  32. int cibleY();
  33. int provenance(int i, int i1, int j, int j1);
  34. void annuler(Matrice *mat2,forme3D ** nosformes, uint tex1, uint tex2,uint tex3, uint tex4, uint tex5,uint tex7,uint posdepart);
  35. };
  36. #endif


 
Malheureusement, le compilateur semble ignorer superbement la classe Mouvement, et me gratifie de ceci : [:kains]  
 

Code :
  1. c...\visual studio 2005\projects\jeu sokoban\Camera.h(22) : error C2065: 'Mouvement' : identificateur non déclaré
  2. Camera.cpp


 
Je ne pense pas (??) que l'erreur soit liée au template puisque si j'enlève la ligne QStack<Mouvement> mouvements; et que je la remplace par un simple Mouvement essai; pour voir, j'obtiens :
 

Code :
  1. ...\visual studio 2005\projects\jeu sokoban\Camera.h(23) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'essai'
  2. ...\visual studio 2005\projects\jeu sokoban\Camera.h(23) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
  3. ...\visual studio 2005\projects\jeu sokoban\Camera.h(23) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut


 
Voilà. Est-ce que quelqu'un à une idée ? Merci d'avance :)


Message édité par Upsilon le 18-12-2007 à 16:15:39
Reply

Marsh Posté le 18-12-2007 à 15:23:08   

Reply

Marsh Posté le 18-12-2007 à 15:27:46    

Salut,
 
Y'a un problème au niveau de ta classe Mouvement:

Code :
  1. include "Mouvement.h"
  2. class Mouvement
  3. ...


Il y a combien de définitions de la classe

Reply

Marsh Posté le 18-12-2007 à 15:34:12    

Merci d'avoir répondu aussi vite ;)  
 
Ben une seul, un seul fichier Mouvement.h :??: (Ou je n'ai pas compris la question ?)


Message édité par Upsilon le 18-12-2007 à 15:35:45
Reply

Marsh Posté le 18-12-2007 à 15:39:08    

Y'a quoi dans Mouvement.h ? Tu n'y déclare pas la classe Mouvement?

Reply

Marsh Posté le 18-12-2007 à 15:40:50    

Il y a le code que j'ai mis dans mon premier message (premier encadré)

Reply

Marsh Posté le 18-12-2007 à 15:45:04    

Pourquoi l'inclues-tu dans lui-même?
 
Bon, le vrai coeur du problème, c'est que tu as une dépendance mutuelle: Camera a besoin de Mouvement et inversement
(Ou plus exactement, c'est ce que tu as codé).
 
Mouvement n'a (ici) pas besoin de Camera, donc supprimes l'include a Camera. Si plus tard tu en as besoin, il te faudra utiliser une forward declaration (désolé, j'ai pas de terme français). Au passage, il est préférable de les utiliser un maximum, un petit tour sur Google t'en diras plus sur le sujet.

Reply

Marsh Posté le 18-12-2007 à 15:54:22    

Citation :

Bon, le vrai coeur du problème, c'est que tu as une dépendance mutuelle: Camera a besoin de Mouvement et inversement  
(Ou plus exactement, c'est ce que tu as codé).  
 
Mouvement n'a (ici) pas besoin de Camera, donc supprimes l'include a Camera. Si plus tard tu en as besoin, il te faudra utiliser une forward declaration (désolé, j'ai pas de terme français). Au passage, il est préférable de les utiliser un maximum, un petit tour sur Google t'en diras plus sur le sujet.


 
Merci pour ton aide  :jap: , c'était bien ça ! :love:
 
Mouvement n'utilisera de toute façons jamais Camera, donc ça ira comme ça, merci pour l'info au passage.
 
Franchement, je n'y aurais jamais pensé... Heureusement que j'ai posé la question :sweat:  
 

Citation :

Pourquoi l'inclues-tu dans lui-même?


J'essayais un peu au hasard ;)

Reply

Marsh Posté le 18-12-2007 à 16:17:17    

y a pas de hasard en prog :o

Reply

Marsh Posté le 18-12-2007 à 16:24:43    

Bah des fois ça marche et ça évite de passer 2h pour une bêtise :o  
 
(Même si sur ce coup c'était loupé :D )

Reply

Marsh Posté le 18-12-2007 à 16:55:22    

Rappel: Garcimore n'est effectivement pas connu pour ses programmes [:petrus75]

Reply

Marsh Posté le 18-12-2007 à 16:55:22   

Reply

Marsh Posté le 18-12-2007 à 17:20:45    

Upsilon a écrit :

Bah des fois ça marche


 
ca ne amrche pas, par contre ca montre bien que tu pipe rien à ce que tu écris (:o)

Reply

Marsh Posté le 18-12-2007 à 18:30:43    

Je ne dis pas que programmer au hasard est une solution... Ce que je dis c'est que pour les détails techniques genre syntaxe ou autre il est parfois plus simple d'essayer plusieurs possibilités que de se farcir 2 pages de doc :o

Reply

Marsh Posté le 18-12-2007 à 18:38:32    

Non. Parce que ton erreur tu la referas sans cesse, et crois moi l'alignement des planètes ne joue pas en ta faveur.
Le forum n'est pas là pour t'éviter de te farcir 2 pages de doc, mais plutôt pour qu'on (essaie) de t'aiguiller dans la bonne direction et lire les bonnes choses; ce qui implique pas mal de travail personnel malgré tout.

Reply

Marsh Posté le 18-12-2007 à 19:05:33    

Upsilon a écrit :

Je ne dis pas que programmer au hasard est une solution... Ce que je dis c'est que pour les détails techniques genre syntaxe ou autre il est parfois plus simple d'essayer plusieurs possibilités que de se farcir 2 pages de doc :o


 
Un jour normal, je t'aurais dit d'aller mourir.
 
 
 
C'est un jour normal :|

Reply

Marsh Posté le 18-12-2007 à 20:59:22    

Citation :

Le forum n'est pas là pour t'éviter de te farcir 2 pages de doc


Je précise juste que je n'ai pas utilisé le forum dans ce but et que si j'ai posé la question c'est justement parce que je ne savais pas dans quelle direction chercher le problème.
 
Sur ce, bonsoir :sleep:

Reply

Sujets relatifs:

Leave a Replay

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