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

问题描述:

我有一个基类多态类(具有虚方法)以及派生自它的派生类。 我尝试使用下面的代码无法使用派生的多态创建基类的shared_pointer

 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 

读环顾四周,我很想使用构建OK下面,但我有一些疑惑。你认为这是正确的吗?

 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

感谢您的帮助

+0

尝试'dynamic_cast (deriver_class对象)' – nmikhailov

+0

不明白,这似乎工作正常:http://www.ideone.com/N63Qf – Nim

+0

嗯,[这个例子](http:// ideone。 com/3Lzys)工作正常。你的代码有什么不同? –

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

这应该工作得很好。

也许这些类毕竟不相关?

也许那些类在这一点上是不完整的,所以编译器不知道类是相关的? (尽管如此,这也会产生其他错误。)

+0

我会投票使用点的类不完整的定义... +1 –

+0

嗨我需要检查'COS派生_类继承base_class但它不起作用。 –

+0

..当这可能发生?我无法理解,因为我在别处构建了一个示例,现在它构建了!?!?! –

这应该如原先所述的那样工作。 derived_class *将会愉快地转换成一个base_class *,用来构造shared_ptr。正如指出的那样,ideone也会编译它。我建议你的Boost安装或编译器有问题。

或者,正如指出的那样,您的其他代码。

+1

甚至与OP自己的代码... –

+0

实际上,shared_ptr应该愉快地接受派生类指针作为参数,然后做上传。 – visitor

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