vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
2 sept. 2005 à 17:34
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
2 sept. 2005 à 18:23
J'obtiens ce warning pour l'exemple suivant. (c'est qu'un warning donc je m'en fous mais j'aimerais savoir quel est le problème quand même).
---------------------------------------------------
#include
using namespace std;
class A;
class B
{
public:
A* m_parent;
B(A* parent)
{
m_parent = parent;
}
};
class A
{
public:
B m_child;
int x;
A(): m_child(this)
{
x = 12;
}
};
int main()
{
A a;
cout << a.m_child.m_parent->x << endl;
}
---------------------------------------------------
L'exemple peut paraitre assez bizarre ou même moche, mais j'ai besoin de faire ca. L'affichage de x à la fin montre que le warning n'a pas de raison d'être puisque tout marche bien
Je voudrais savoir si c'est un coup de bol et si dans certains cas ca ne marcherait pas
Merci
A voir également:
'this' : utilisé dans la liste des initialiseurs membre de base
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 2 sept. 2005 à 18:18
Quand tu fais
A(): m_child(this)
le constructeur de B est appelé avec l'adresse d'un A dont les membres
ne sont pas construit, ca pourrait provoquer un comportement indéfinis
si tu ne prends pas ca en considération dans le constructeur de B. Dans
ton cas ca ne pose pas de probleme et le warning est juste la pour
t'avertir.