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

  FORUM HardWare.fr
  Programmation
  C++

  problème de classes qui s'incluent entre elles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de classes qui s'incluent entre elles

n°1706532
benito5965​0
Posté le 22-03-2008 à 13:46:05  profilanswer
 

Bonjour à tous!
 
J'ai un petit problème dans un grand problème que je réalise. J'ai deux classes A et B, et j'ai une méthode de la classe A qui utilise une instance de la classe B. De la même manière j'ai une méthode de la classe B qui utilise  une instance de la classe A. J'ai bien mis dans chacune des classes A et B les #include "A.h" et #include "B.h", mais au momment de la compilation j'ai un message d'erreur qui ne provient que de la class B : B.h:41: erreur: A has not been declared
Par contre dans la classe A je n'est pas de meesage d'erreur.
 
Je n'arrive pas à savoir à quoi est du cette erreur, peut-être simplement est-il impossible en C++ d'inclure deux classes entre-elles (car c'est peut-être une façon de procéder illogique de ma part). C'est pourquoi je demande votre aide.
 
Merci d'avance

mood
Publicité
Posté le 22-03-2008 à 13:46:05  profilanswer
 

n°1706543
Joel F
Real men use unique_ptr
Posté le 22-03-2008 à 14:11:03  profilanswer
 

forward declaration :o
 
B.hpp

Code :
  1. class A;
  2. class B
  3. {
  4.   public :
  5.   void do_stuff( const A& a );
  6. };


 
A.hpp

Code :
  1. class B;
  2. class A
  3. {
  4.   public :
  5.   void do_stuff( const B& b );
  6. };


 
Ne fonctionne que si tu utilises des références ou pointeurs sur A/B.

n°1706550
jesus_chri​st
votre nouveau dieu
Posté le 22-03-2008 à 14:36:52  profilanswer
 

j'ajouterais que deux classes A et B ne peuvent hériter l'une de l'autre
 
class A : public B {};
class B : public A {};
 
ni ne peuvent s'aggréger l'une l'autre
 
class A { B b; };
class B { A a; };
 
C'est interdit car non seulement de tels types auraient des tailles infinies, mais de toute façon c'est complètement illogique.


Message édité par jesus_christ le 22-03-2008 à 14:37:24
n°1706551
jesus_chri​st
votre nouveau dieu
Posté le 22-03-2008 à 14:40:53  profilanswer
 

benito59650 a écrit :

Bonjour à tous!
 
J'ai un petit problème dans un grand problème que je réalise. J'ai deux classes A et B, et j'ai une méthode de la classe A qui utilise une instance de la classe B. De la même manière j'ai une méthode de la classe B qui utilise  une instance de la classe A. J'ai bien mis dans chacune des classes A et B les #include "A.h" et #include "B.h", mais au momment de la compilation j'ai un message d'erreur qui ne provient que de la class B : B.h:41: erreur: A has not been declared
Par contre dans la classe A je n'est pas de meesage d'erreur.
 
Je n'arrive pas à savoir à quoi est du cette erreur, peut-être simplement est-il impossible en C++ d'inclure deux classes entre-elles (car c'est peut-être une façon de procéder illogique de ma part). C'est pourquoi je demande votre aide.
 
Merci d'avance


 
Si l'instance est dans les paramètres, passe le paramètre par const-reference comme l'indique Joel F.
Si l'instance est dans le code de la fonction, écrit le code à part, pas directement dans la classe (pas "inline" à la java quoi).
 

Code :
  1. class A
  2. {
  3.    void f();
  4. };
  5. class B
  6. {
  7.    void g();
  8. };
  9. void A::f()
  10. {
  11.    B b;
  12.    b.g();
  13. }
  14. void B::g()
  15. {
  16.    A a;
  17.    a.f();
  18. }

n°1706565
benito5965​0
Posté le 22-03-2008 à 15:28:55  profilanswer
 

Merci de vos réponse.
 
J'ai modifié mon code en tenant compte de vos remarques, mais j'ai un nouveau message d'erreur.
voilà la déclaration de la méthode qui pose problème:
 
virtual void calculImpactAleas(int periode, const Aleas& A, const Entreprise* E, const Marche* M);  
 
message d'erreur:
SecteurDActivite.h:41: erreur: expected «," or «..." before «*" token
SecteurDActivite.h:41: erreur: ISO C++ forbids declaration of «Entreprise" with no type
 
Explication :  
c'est une méthode de la classe SecteurDActivite, qui utilise en paramètre des instances des classes Entreprises, Marche et Aleas. Mais dans les classes Entreprise et Marche, j'utilise des méthodes qui prennent en paramètres des SecteurDActivite.
 
Pour être clair Aleas ne pose pas de problème, et ma classe A de tout à l'heur est la classe Entreprise ou la classe Marche et la classe B et la classe SecteurDActivite.
 
Merci encore pour votre aide

n°1706580
benito5965​0
Posté le 22-03-2008 à 16:03:05  profilanswer
 

C'est bon en fait ça marche!!
 
Merci beaucoup messieurs


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

  problème de classes qui s'incluent entre elles

 

Sujets relatifs
Problème bizarre[URGENT] Probleme de dump mysql
Probleme de connection a une base local via ApplicationProblème de compatibilité IE et FF ...
[C++]Problème dans mon programme[resolu(erreur de noob)]Probleme "segment fault"
probleme avec php web galleryProbleme de script?
[PHP] Forcer le download - Problème avec IE en remote 
Plus de sujets relatifs à : problème de classes qui s'incluent entre elles


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