У меня есть базовый полиморфный класс (с виртуальными методами) и производный от него.
Я пытаюсь использовать следующий код
boost::shared_ptr<base_class> ptr( new derived_class() );
но компилятор возвращает мне следующую ошибку
cannot convert ‘fpga_northwest*’ to ‘fpga*’ in initialization
make: *** [../obj/ixecute_cmd_interface.o] Error 1
Читая вокруг, я испытываю желание использовать следующее, которое строит нормально, но у меня есть некоторые сомнения. Вы думаете, что это правильно?
boost::shared_ptr<base_class> ptr_base;
boost::shared_ptr<derived_class> ptr_derived( new derived_class() );
ptr_base = boost::dynamic_pointer_cast<base_class>( ptr_derived );
Если я использую boost::static_pointer_cast
, у меня ошибка компилятора; так как я кастую из производного в базу не должно быть более правильным static_cast
?
Спасибо за вашу помощь