C++ ссылки на указатели

У меня есть метод, с вот такой сигнатурой: void push(Object*& object);

Я пытаюсь его вызвать вот так:

RelaxString* data = new RelaxString("Lol");

s.push(data);
s1.push(data);

RelaxString - это наследник класса Object

Но VisualStudio говорит следующее: введите сюда описание изображения

Как мне решить эту проблему? Мне надо чтобы указатель принимался по ссылке, то есть чтобы я мог изменять адрес, на который он указывает.


Ответы (1 шт):

Автор решения: user7860670

Ссылка на указатель на Object не может ссылаться на указатель на RelaxString. Так как типы указатель на Object и указатель на RelaxString никак не связаны. Соответственно необходимо сначала создать указатель на базовый класс:

RelaxString * p_data{new RelaxString("Lol")};
Object * p_object{static_cast<Object *>(p_data)};
s.push(p_object);

Вообще говоря, передача указателя по ссылке в С++ может намекать на то, что вы делаете что-то не так. Особенно когда метод называется push.

→ Ссылка