Ich habe einen Vektor der UnderlyingClass Zeiger in einem anderen Objekt gespeichert, und innerhalb einer Methode in UnderlyingClass möchte ich den "this" Zeiger an das Ende des Vektors hinzufügen. Wenn ich den Inhalt des Vektors unmittelbar nach dem Aufruf von push_back anschaue, ist der falsche Zeiger dort. Was könnte schief gehen?push_back (this) schiebt falschen Zeiger auf Vektor
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;
Hier ist der Ausgang:
this: 0x11038f70
size is 1
size-1: 0x11038fa8
back: 0x11038fa8
0: 0x11038fa8
this: 0x11038f70
text box ptr: 0x11039070
text box callbacks ptr: 0x11039098
By the way, ist Rückrufe ein Vektor von WebCallback Zeiger und UnderlyingClass implementiert WebCallback:
std::vector<WebCallback*> callbacks;
class UnderlyingClass
:public WebCallback
von Kommentaren Kopierte: (siehe unten Antwort)
Ausgabe:
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
okay, so dass erklärt, warum die Zeiger nicht übereinstimmen.
Meine eigentliche Frage, dann ist dies:
wie kann ich die richtige Version eines Verfahrens aufgerufen werden bekommen? Insbesondere schreibt WebCallback vor, dass eine Funktion auf WebCommand() implementiert werden soll, und Callbacks [0] -> onWebCommand() bewirkt derzeit nicht, dass der onWebCommand(), den ich in UnderlyingClass geschrieben habe, ausgeführt wird.
Das klingt sicherlich wie Mehrfachvererbung. –
Hat UnderlyingClass andere Basisklassen? –
Dagnammit. Das ist schon das zweite Mal, dass Litb mich um genau 47 Sekunden geschlagen hat. Ich bin wie eine viertel Lichtsekunde näher an den USA als er, ich sollte diese gewinnen! –