Bonjour tout le monde,
Jusqu'à présent, je m'en sortais relativement facilement avec les #ifndef et les forward déclarations, mais j'arrive maintenant à un cas de figure qui m'embête un peu, et je me casse les dents dessus depuis qqs heures maintenant :|
Voici la situation que je résume à l'aide de 2 fichiers, foobar.h et main.cpp.
Fichier foobar.h
Code :
- #ifndef _20031012_FOOBAR
- #define _20031012_FOOBAR
- class Foo {
- public:
- Bar* monBar ;
- void maMethode() { monBar->maMethode() ; }
- } ;
- class Bar {
- public:
- Foo* monFoo ;
- void maMethode() { monFoo->maMethode() ; }
- } ;
|
Fichier main.cpp
Code :
- #include "foobar.h"
- int main() {
- Foo* f = new Foo() ;
- Bar* b = new Bar() ;
- f->monBar = b ; b->monFoo = f ;
- f->maMethode() ; b->maMethode() ;
- }
|
Ce n'est pas dans le fichier main.cpp que se situe le problème, mais je vous l'ai mis si vous vouliez faire l'essai chez vous. Voici le résultat de la compilation :
Résultat de la compilation
$> g++ -Wall -pedantic main.cpp
In file included from main.cpp:1:
foobar.h:7: syntax error before `*' token
foobar.h: In member function `void Foo::maMethode()':
foobar.h:8: `monBar' undeclared (first use this function)
foobar.h:8: (Each undeclared identifier is reported only once for each function
it appears in.)
main.cpp: In function `int main()':
main.cpp:7: `class Foo' has no member named `monBar'
$>
|
J'ai effectué une recherche, mais je n'ai pas trouvé de topics faisant référence à ce cas de fugure particulier (appel d'une fonction membre d'une classe dans une classe, à travers un pointeur). J'imagine qu'il s'agit d'un problème pourtant classique maintes et maintes fois débatu, je m'escuse par avance de la redondance.
Si quelqu'un à le courage de me donner un petit coup de main, ca serait sympa !
Merci, @+
Message édité par Evadream -jbd- le 11-10-2003 à 17:33:21