K@zuya
Messages postés306Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention15 février 2016
-
15 févr. 2016 à 00:21
K@zuya
Messages postés306Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention15 février 2016
-
15 févr. 2016 à 20:35
Bonjour,
J'ai une dépendance cyclique que je ne parviens pas à résoudre.
Globalement, le problème est le suivant :
- J'ai une classe polymorphe (B hérite de A avec méthode virtuelle)
- J'ai un singleton, capable de faire A* a = new B();
- Mais mon polymorphe a besoin d'appeler le singleton pour faire des bricoles internes (B = C::GetInstance()->Bricoler())
Donc tout le monde appelle tout le monde, c'est le bazar... Voici un visuel qui peut éventuellement aider :
Voci également le code extrêmement simplifié, mais le problème est bien là, j'ai vérifié.
Le problème c'est que la façon dont les classes s'appellent, je ne peut pas faire de pré-déclaration genre : class A;
Ça me fait des erreurs...
Et si je ne le fait pas, j'ai également des erreurs...
Je sèche !!! Au secours....
En utilisant correctement les forward declaration, on s'en sort très bien :). Il faut bien comprendre que les forward vont dans le header, mais que les "include" doivent rester dans le corps. Il faut donc nécessairement découper ton fichier en deux si tu veux que ça fonctionne (une forward declaration n'est pas une déclaration "vue" par le link).
Pour reprendre ton exemple, j'ai fait ceci (qui compile, link et fonctionne):
A.h
#define __A__
#include "C.h"
class A
{
public:
virtual void Hello();
};
#endif
K@zuya
Messages postés306Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention15 février 2016 15 févr. 2016 à 20:35
Oh lala, trop puissant, ça marche !!!
Oui, en fait dans mes forward declarations, je n'avais pas fait le #include A, B dans le corps de C. C'est pour ça que ça ne fonctionnait pas, merci beaucoup. J'ai passé presque une journée à galérer sur ce problème.