J'ai 2 classes qui font référence l'une de l'autre, comme l'exemple ici.

La classe B contient un objet de type A et la classe A contient un pointeur de type B. Je veux initialiser le pointeur de type B de la classe A lors de la création de l'objet B. Je fais donc ainsi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
B::B() :
	a(this)
{
}
Et ca m'affiche un warning:

warning C4355: 'this' : used in base member initializer list
Ce warning signale que tant que B n'a pas été construit totalement, A ne peut pas faire appel à une fonction de B sous peine de risque de plantage.
A peut donc appeler une fonction de B qu'en dehors de son constructeur (peut-être que je ne pense pas à un cas de figure et que ça peut planter d'une autre manière).
Ce qui donne:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
B b;
b.GetA().DoSomething();
Cependant le warning me gène même si j'aurais envie de l'écrire de cette manière, faire le lien dès la construction de l'objet. Il vaut mieux faire le lien en 2 temps?
Du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
B b;
b.InitA();
b.GetA().DoSomething();
Dans ce cas là, je ne peux pas mettre comme membre de A une référence de B (ce qui est plus propre à mon goût).

Des commentaires?