Чтобы продемонстрировать, почему его проблема, представьте, что вы имели другой-структуру
struct OtherDerived : Base
{};
Теперь рассмотрим, что произойдет, если вы добавили следующую строку после определения б
b = new OtherDerived();
это (если это разрешено) должен был бы присвоить d (который имеет тип Derived *) для OtherDerived *, который недействителен, поскольку OtherDerived не является производным от Derive.
Чтобы решить эту проблему, вы можете решить, должен ли указатель, на который вы ссылаетесь, быть производным указателем. Если нет, это может быть базовый указатель, и ваша ссылка на базовый указатель будет тогда ОК.
Derived *d{};
Base* pointerToABase = d;
Base*& refToAPointerToABase = pointerToABase;
В противном случае, если указатель вы ссылаетесь должен быть Derived * не Base *, то вы можете изменить тип справки: например, замените объявление b.
Derived*& refToAPointerToADerived = d;
Я знаю, что это не то, что вы на самом деле просят в названии вопроса - но, как описано, вы не можете сделать это в любом случае.
Не зная, почему вам нужна ссылка на указатель, трудно предложить альтернативный подход.
Я подозреваю, что вы хотели: 'Derived d; Base & b = d; ' –
@PiotrSkotnicki Нет, мне действительно нужны указатели. – AlwaysLearning
Если это разрешено, вы можете сказать 'b = new Base;'. и 'd' будет указывать на несвязанный объект. –