abubu38
Messages postés2Date d'inscriptionsamedi 12 juillet 2003StatutMembreDernière intervention12 juillet 2003
-
12 juil. 2003 à 15:03
abubu38
Messages postés2Date d'inscriptionsamedi 12 juillet 2003StatutMembreDernière intervention12 juillet 2003
-
12 juil. 2003 à 19:15
Salut,
J'ai un gros probleme de compilation au niveau des .h :
fichier f1.h :
#include f2.h
class A {
// définition nécéssitant la classe B... qui hérite de A
};
fichier f2.h :
#include f1.h
class B : public A {
//blahblah
};
Ces 2 fichiers sont encadres par #indef... #define.......#endif
Le problème est qu'une prédéclaration de la classe A dans le fichier f2 avant la définition de B ne suffit pas puisque B hérite de A, et donc B a besoin de la définition complète de A, qui n'est pas encore chargée au moment du chargement de la classe B...
Quelqu'un a t'il une idee pour compiler ce bordel?
Ne me demande pas pourquoi ce model tordu, il s'agit en fait d'une petite partie simplifiée d'une structure de données assez complexe...
abubu38
Messages postés2Date d'inscriptionsamedi 12 juillet 2003StatutMembreDernière intervention12 juillet 2003 12 juil. 2003 à 19:15
Oui, si le tout est dans un seul et même fichier, c'est simple...
Le probleme est que ce fichier f1.h où se situe la classe de base A inclut un fichier a1 qui inclut un fichier a2, qui inclut un fichier a3 [...] qui inclut ce fameux fichier f2 ou est déclaré et défini le fichier f2...
Avec, 90 classes, je ne peux pas tout mettre dans un seul et même fichier!
En fait le problème viens du fait que, dans f1.h, le #include "f2.h" est avant la définition de la classe A...
En mettant ce le #include "f2.h" après la définition de A, ça compile en déclarant B en tête du fichier, c'est à dire, pour le fichier f1 :
<code>#ifndef __HEADER_1__
#define __HEADER_1__
class B;
class A {
//...
public:
B f();
//...
};
#include "f2.h"
#endif
[\Code]
Mais n'y a t'il pas d'autre méthode, avec des #pragma par exemple (comme en Ada avec Pragma Elaborate_All) qui permettrait de garder tous les includes en tête du fichier... ce serait plus propre, plus lisble et mieux debugable par d'autres qui passeraient après...