У меня есть вектор указателей UnderlyingClass, хранящихся в другом объекте, и внутри метода в UnderlyingClass я хочу добавить «этот» указатель в конец этого вектора. Когда я смотрю на содержимое вектора сразу после вызова push_back, там находится неправильный указатель. Что может пойти не так?push_back (this) толкает неправильный указатель на вектор
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;
Вот результат:
this: 0x11038f70
size is 1
size-1: 0x11038fa8
back: 0x11038fa8
0: 0x11038fa8
this: 0x11038f70
text box ptr: 0x11039070
text box callbacks ptr: 0x11039098
Кстати, обратные вызовы вектор указателей WebCallback и UnderlyingClass реализует WebCallback:
std::vector<WebCallback*> callbacks;
class UnderlyingClass
:public WebCallback
Скопировано из комментариев (см Ответ ниже)
мощность:
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
В порядке, поэтому объясняется, почему указатели не совпадают.
Мой реальный вопрос, то это:
как получить правильную версию метода будет называться? В частности, WebCallback предусматривает, что функция onWebCommand() будет реализована, и прямо сейчас callbacks [0] -> onWebCommand() не вызывает onWebCommand(), который я написал в UnderlyingClass для выполнения.
Это, безусловно, звучит как множественное наследование. –
Имеет ли UnderlyingClass какие-либо другие базовые классы? –
Dagnammit. Это второй раз, когда сегодня лампочка избила меня ровно на 47 секунд. Я как четверть света ближе к США, чем он, я должен победить! –