无法使用多态派生创建基类的shared_pointer

时间:2011-10-10 09:44:20

标签: c++ casting shared-ptr

我有一个基本的多态类(使用虚方法)并从中派生出来。 我正在尝试使用以下代码

     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

感谢您的帮助

3 个答案:

答案 0 :(得分:5)

boost::shared_ptr<base_class> ptr( new derived_class() );

这应该可以正常工作。

也许这些课程毕竟不相关?

也许这些类在那时是不完整的,所以编译器不知道这些类是相关的? (但这也会产生其他错误。)

答案 1 :(得分:3)

这应该如最初所述的那样起作用。 derived_class *将很乐意转换为base_class *,用于构造shared_ptr。正如所指出的那样,ideone也会编译它。我建议你的Boost安装或编译器有问题。

或者,正如所指出的,代码的其余部分。

答案 2 :(得分:1)

需要类型强制才能执行此强制转换,这是通过成员模板实现的。旧编译器不太支持这一点。因此,在这些编译器上禁用它。你使用什么编译器?