J'ai un vecteur de pointeurs UnderlyingClass stockés dans un autre objet, et à l'intérieur d'une méthode dans UnderlyingClass je veux ajouter le pointeur "this" à la fin de ce vecteur. Lorsque je regarde le contenu du vecteur immédiatement après l'appel push_back, le mauvais pointeur est là. Qu'est-ce qui pourrait mal tourner?push_back (this) pousse le pointeur erroné sur le vecteur
cout << "this: " << this << endl;
aTextBox.callbacks.push_back(this);
cout << "size is " << aTextBox.callbacks.size() << endl;
cout << "size-1: " << aTextBox.callbacks[aTextBox.callbacks.size()-1] << endl;
cout << "back: " << aTextBox.callbacks.back() << endl;
cout << "0: " << aTextBox.callbacks[0] << endl;
cout << "this: " << this << endl;
cout << "text box ptr: " << &aTextBox << endl;
cout << "text box callbacks ptr: " << &(aTextBox.callbacks) << endl;
est ici la sortie:
this: 0x11038f70
size is 1
size-1: 0x11038fa8
back: 0x11038fa8
0: 0x11038fa8
this: 0x11038f70
text box ptr: 0x11039070
text box callbacks ptr: 0x11039098
Par ailleurs, callbacks est un vecteur de pointeurs web call back, et UnderlyingClass implémente web call back:
std::vector<WebCallback*> callbacks;
class UnderlyingClass
:public WebCallback
Copié des commentaires: (voir réponse ci-dessous
sortie:
this: 0x6359f70
size is 1
size-1: 0x6359fa8
back: 0x6359fa8
0: 0x6359fa8
this: 0x6359f70
WebCallback This: 0x6359fa8
text box ptr: 0x635a070
text box callbacks ptr: 0x635a098
ok, cela explique pourquoi les pointeurs ne correspondent pas.
Ma vraie question est donc celle-ci:
comment puis-je obtenir la version correcte d'une méthode à appeler? Plus précisément, WebCallback stipule qu'une fonction onWebCommand() doit être implémentée, et maintenant les callbacks [0] -> onWebCommand() ne provoquent pas l'exécution de onWebCommand() que j'ai écrite dans UnderlyingClass.
Cela ressemble sûrement à l'héritage multiple. –
UnderlyingClass a-t-il d'autres classes de base? –
Dagnammit. C'est la deuxième fois aujourd'hui que litb m'a battu exactement 47 secondes. Je suis comme un quart de seconde plus proche des Etats-Unis que lui, je devrais gagner ces derniers! –