J'ai un problème lors de la création d'une forme de hiérarchie avec différents types d'objet. J'ai une classe qui a un membre d'une autre classe, comme ceci:Résolution du référencement croisé
class A
{
public:
A(){}
~A(){}
void addB(B* dep){
child = dep;
dep->addOwner(this);
}
void updateChild(){
child->printOwner();
}
void print(){
printf("Printing...");
}
private:
B* child;
};
Et c'est la classe B:
class B
{
public:
void addOwner(A* owner){
ownerObject = owner;
}
//ISNT WORKING
void printOwner(){
ownerObject->print();
}
private:
A* ownerObject;
};
Appel d'une fonction de « B » hors de la classe « A » fonctionne seulement bien mais l'essayer vice versa donne une erreur de compilateur car A n'est pas défini dans B. C'est en fait en utilisant une déclaration include et une forward, mais je suppose que c'est un problème de référence que le compilateur ne peut pas résoudre.
Y at-il une chance de résoudre ce problème ou devrais-je repenser mon design?
Merci beaucoup! La véritable idée derrière ce "design" était d'avoir une classe (dans cet exemple A) qui fonctionne comme un conteneur pour beaucoup de classes abstraites ("B"), de sorte que tous les "B" étendant la fonctionnalité de "A "en fonction de leur mise en œuvre concrète. Pour la fonctionnalité qui est la même pour tous les objets B, je crée une implémentation dans A, car il n'aurait pas de sens d'avoir 10 objets B ayant des fonctionnalités identiques. Au moins, ce serait aussi un problème de synchronisation. – SideEffect
@ user450556: J'ai l'impression que vous voudrez peut-être vous pencher sur la conception basée sur des politiques –