Вам необходимо ввести временный тип Animal*
:
Dog *d = new Dog(x); //some parameter x.
Animal *a = d;
Animal **animal = &a;
someMethod(animal);
Причина этого заключается в том, что & d равно Dog**
, которое нельзя преобразовать в Animal**
, даже если Dog*
можно преобразовать в Animal*
.
Обычно вы исправляете эту строку, используя что-то вроде этого ( предупреждение - не компилируется! ):
Dog *d = new Dog(x); //some parameter x.
Animal **animal = &(static_cast<Animal*>(d));
someMethod(animal);
Однако это невозможно, поскольку возвращаемое значение static_cast
является временным (технически это rvalue
), поэтому вы не можете получить его адрес. Следовательно, вам понадобится дополнительный Animal*
local для этой работы.