我已经看到了关于这个主题的一些其他问题,但仍然没有找到答案 - 我想我错过了一些东西:
我定义了两个简单的测试类:
class TestBase
{
public:
TestBase ( ) { };
~ TestBase ( ) { };
protected:
inline virtual int getInt ( )
{
return 0;
}
};
class TestDerived : public TestBase
{
protected:
inline int getInt ( ) override
{
return 1;
}
};
Run Code Online (Sandbox Code Playgroud)
我声明了typedef来简化它们的使用 std::shared_ptr:
typedef std::shared_ptr<TestBase> spBase;
typedef std::shared_ptr<TestDerived> spDerived;
Run Code Online (Sandbox Code Playgroud)
问题:我无法编译代码以shared_ptr多态方式使用这些声明,即使base在所有这些情况下实际上是一个实例spDerived:
Run Code Online (Sandbox Code Playgroud)spBase base; spDerived derived = static_cast < spDerived > ( base );错误:没有匹配函数来调用'std :: shared_ptr :: …