J'ai trois classes: une TopClass
qui contient une instance d'un pointeur BottomClass
. Le BottomClass
contient un pointeur vers un HelperClass
. Le HelperClass
conserve un pointeur sur le TopClass
. La dépendance circulaire apparaît et une déclaration avant est nécessaire dans le HelperClass
.Pourquoi une déclaration forward ne corrige-t-elle pas la dépendance circulaire?
Tout cela est illustré avec les extraits de code suivant:
#include "BottomLevel.h"
namespace foo
{
class TopLevel
{
private:
BottomLevel* item;
};
}
-
#include "HelperClass.h"
namespace foo
{
class BottomLevel
{
private:
HelperClass* item;
};
}
-
class TopLevel; // forward declaration here
namespace foo
{
class HelperClass
{
public
HelperClass(TopLevel* item);
};
}
Le problème vient en essayant de faire des choses dans le fichier de mise en œuvre . Si je #include "TopClass.h"
dans le fichier cpp, je reçois des erreurs de compilation indiquant "fonction de membre surchargé non trouvé - utilisation de type indéfini 'TopLevel
'" (ERREURS C2511 et C2027).
Ensuite, si je ne fais pas le #include
je suis encore à gauche avec des erreurs C2027 parce que j'essaie d'utiliser le type forward forward. Je sais juste qu'il existe une méthode pour résoudre ce problème, je suis sûr que je l'ai déjà fait, mais je ne peux pas me souvenir de ce que je suis censé faire. Toute aide s'il vous plaît?
/facepalm - Vous monsieur, me humilierez. Merci! – Anthony