Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2588 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Question basique #include croisés

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Question basique #include croisés

n°537117
Evadream -​jbd-
Posté le 11-10-2003 à 16:53:27  profilanswer
 

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 :
  1. #ifndef _20031012_FOOBAR
  2. #define _20031012_FOOBAR
  3. class Foo {
  4. public:
  5.         Bar* monBar ;
  6.         void maMethode() { monBar->maMethode() ; }
  7. } ;
  8. class Bar {
  9. public:
  10.         Foo* monFoo ;
  11.         void maMethode() { monFoo->maMethode() ; }
  12. } ;


 
Fichier main.cpp

Code :
  1. #include "foobar.h"
  2. int main() {
  3.         Foo* f = new Foo() ;
  4.         Bar* b = new Bar() ;
  5.         f->monBar = b  ; b->monFoo = f  ;
  6.         f->maMethode() ; b->maMethode() ;
  7. }


 
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
mood
Publicité
Posté le 11-10-2003 à 16:53:27  profilanswer
 

n°537120
Taz
bisounours-codeur
Posté le 11-10-2003 à 17:06:40  profilanswer
 

tu veux une "Foward Declaration"
 
class Foo;
 
class Bar
{
   Foo *f;
};
 
 
cela est possible, le compilo sait que Foo existe et comme tous les pointeurs ont la même taille, il est capable d'allouer Foo*.
 
 
et voilà

n°537121
*syl*
--> []
Posté le 11-10-2003 à 17:08:41  profilanswer
 

Vire tes inlines et claques les dans le .cpp et fait une forward declaration de Bar

n°537124
Evadream -​jbd-
Posté le 11-10-2003 à 17:14:54  profilanswer
 

Taz a écrit :

tu veux une "Foward Declaration"
 
class Foo;
 
class Bar
{
   Foo *f;
};
 
 
cela est possible, le compilo sait que Foo existe et comme tous les pointeurs ont la même taille, il est capable d'allouer Foo*.
 
 
et voilà


 
C'est la première chose que j'ai essayé (avant de faire ce topic), mais le soucis vient alors de l'appel à la fonction monBar->maMethode, qu'il ne connait pas.
 

*Syl* a écrit :

Vire tes inlines et claques les dans le .cpp et fait une forward declaration de Bar


 
Je vais essayer ainsi, merci !


Message édité par Evadream -jbd- le 11-10-2003 à 17:15:27
n°537129
Evadream -​jbd-
Posté le 11-10-2003 à 17:34:39  profilanswer
 

Ca marche en effet beaucoup mieux en définissant les fonctions dans un cpp ! Merci à toi !

n°541677
blackgodde​ss
vive le troll !
Posté le 16-10-2003 à 19:31:27  profilanswer
 

il me semble que tu peux déclaré un pointeur vers une classe en forward definition, mais tu ne peux pas utiliser ses méthodes (tu ne les as pas encore déclarées au compilo). Ainsi, en mettant les définitions de tes méthodes dans un .cpp, la définition (pas forward) de la classe a déjà été lu par le compilo, donc il en connait les méthodes.


---------------
-( BlackGoddess )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Question basique #include croisés

 

Sujets relatifs
Question newb perdu - erreur a la compilationQuestion sur l'heure dans oracle ! HELP a newbie !
j'ai un prob ->Question facile sur les variables SVP mercimodeste petite question sur ce que ca fait ...
[MYSQL] Question sur une "grande table"[Java] Question simple transformer un Double
Excel ou VBA questionUne question bête... (source généré par php --> indentation code).
[c#] Question sur checkboxQuestion importante sur le dévellopement
Plus de sujets relatifs à : [C++] Question basique #include croisés


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR