无法使用派生的多态创建基类的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
?
感谢您的帮助
boost::shared_ptr<base_class> ptr(new derived_class());
这应该工作得很好。
也许这些类毕竟不相关?
也许那些类在这一点上是不完整的,所以编译器不知道类是相关的? (尽管如此,这也会产生其他错误。)
我会投票使用点的类不完整的定义... +1 –
嗨我需要检查'COS派生_类继承base_class但它不起作用。 –
..当这可能发生?我无法理解,因为我在别处构建了一个示例,现在它构建了!?!?! –
这应该如原先所述的那样工作。 derived_class *将会愉快地转换成一个base_class *,用来构造shared_ptr。正如指出的那样,ideone也会编译它。我建议你的Boost安装或编译器有问题。
或者,正如指出的那样,您的其他代码。
甚至与OP自己的代码... –
实际上,shared_ptr应该愉快地接受派生类指针作为参数,然后做上传。 – visitor
需要类型强制才能执行此强制转换,该强制转换是通过成员模板实现的。这在旧的编译器上得不到很好的支持。因此它在这些编译器上被禁用。你使用什么编译器?
尝试'dynamic_cast(deriver_class对象)' –
nmikhailov
不明白,这似乎工作正常:http://www.ideone.com/N63Qf – Nim
嗯,[这个例子](http:// ideone。 com/3Lzys)工作正常。你的代码有什么不同? –