problème de classes qui s'incluent entre elles - C++ - Programmation
Marsh Posté le 22-03-2008 à 14:11:03
forward declaration
B.hpp
Code :
|
A.hpp
Code :
|
Ne fonctionne que si tu utilises des références ou pointeurs sur A/B.
Marsh Posté le 22-03-2008 à 14:36:52
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.
Marsh Posté le 22-03-2008 à 14:40:53
benito59650 a écrit : Bonjour à tous! |
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 :
|
Marsh Posté le 22-03-2008 à 15:28:55
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
Marsh Posté le 22-03-2008 à 13:46:05
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