我看到了其他关于这个主题的问题,但仍然没有找到答案 - 我想我错过了什么:
我定义了两个简单的测试类:
class TestBase
{
public:
TestBase ( ) { };
~ TestBase ( ) { };
protected:
inline virtual int getInt ( )
{
return 0;
}
};
class TestDerived : public TestBase
{
protected:
inline int getInt ( ) override
{
return 1;
}
};
我声明了typedef以简化它们与std::shared_ptr
的使用:
typedef std::shared_ptr<TestBase> spBase;
typedef std::shared_ptr<TestDerived> spDerived;
问题: 我无法将代码编译为使用这些
shared_ptr
多态声明,即使在所有这些情况下,base
实际上都是spDerived
的一个实例。
spBase base; spDerived derived = static_cast < spDerived > ( base );
error: no matching function for call to ‘std::shared_ptr::shared_ptr(spBase&)
spDerived derived = dynamic_cast < spDerived > ( base );
error: cannot dynamic_cast ‘base’ (of type ‘spBase {aka class std::shared_ptr}’) to type ‘spDerived {aka class std::shared_ptr}’ (target is not pointer or reference)
spDerived derived = static_pointer_cast < spDerived > ( base );
error: conversion from ‘std::shared_ptr >’ to non-scalar type ‘spDerived {aka std::shared_ptr}’ requested
spDerived derived = dynamic_pointer_cast < spDerived > ( base );
error: conversion from ‘std::shared_ptr >’ to non-scalar type ‘spDerived {aka std::shared_ptr}’ requested
我正在使用默认的GCC工具链,在Ubuntu 14.04上使用C++11。编译器是gcc-4.9。 我做错了什么?shared_pointer不能用于多态吗?
static_pointer_cast<spDerived::element_type>(base)
- Piotr Skotnicki