[Class] declaration croisé

declaration croisé [Class] - C++ - Programmation

Marsh Posté le 14-01-2005 à 19:18:47    

Et oui c'est encore moi ;D
Aujourd'hui mon probleme est que j'ai un code de ce genre:
 

Code :
  1. #ifndef PANNEL
  2. #define PANNEL
  3. #include <SDL/SDL.h>
  4. #include <iostream.h>
  5. #include "./lst_int.h"
  6. #include "./lst_composant.h"
  7. #include "./composant.h"
  8. class pannel:public composant
  9. {
  10. protected:
  11. int largeur;
  12. int hauteur;
  13. lst_int **surface_comp;
  14. SDL_Surface *surface;
  15. lst_composant lst_comp;
  16. ...


 

Code :
  1. #ifndef COMPOSANT_H
  2. #define COMPOSANT_H
  3. #include <SDL/SDL.h>
  4. #include <stdlib.h>
  5. #include "./pannel.h"
  6. class composant
  7. {
  8. protected:
  9. pannel* pnl;
  10. int x;
  11. int y;
  12. int pos_pannel;
  13. ...


 
pannel.h a besoin de composant.h et vice versa, cela pose problême lors ed la compilation.
 
Si je fait
g++ -c pannel.h
le compilo va inclure composant.h avant de definir la class pannel
or pannel.h n'inclura pas composant.h (en raison du ifndef)
 
En général on résout ce problême avec une déclaration en avant, du genre
 

Code :
  1. typedef pannel;
  2. #include "./lst_int.h"
  3. #include "./lst_composant.h"
  4. #include "./composant.h"
  5. class pannel:public composant
  6. {
  7. protected:
  8. int largeur;
  9. int hauteur;
  10. lst_int **surface_comp;
  11. SDL_Surface *surface;
  12. lst_composant lst_comp;
  13. ..


 
idem pour l'autre fichier
 
Mais le compilo ne veut pas du typedef
 
Je ne sais pas comment résoudre ce probleme ...


Message édité par ffomnislash le 14-01-2005 à 19:19:43
Reply

Marsh Posté le 14-01-2005 à 19:18:47   

Reply

Marsh Posté le 14-01-2005 à 20:32:37    

dans le .h, ajoute la ligne  

Code :
  1. class Panel;


au début


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-01-2005 à 22:56:47    

ok merci, je dois dire que j'avais deja essayé mais cela n'avait pas fonctionné car j'avais utilisé cette méthode partout or apparemment pour l'héritage il est nécessaire d'avoir la classe en entier et pas juste le nom.


Message édité par ffomnislash le 14-01-2005 à 22:57:12
Reply

Marsh Posté le 15-01-2005 à 00:17:41    

bin evidemment
réfléchis un peu à ce qu'est un héritage et tu verras que forcément une forward declaration ne suffit pas

Reply

Marsh Posté le 15-01-2005 à 11:32:15    

c'est en reflechissant que j'ai compris :o

Reply

Sujets relatifs:

Leave a Replay

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