我们有:
Base
; Derived
。 宣言:
class Derived : public Base
{
public:
Derived(); // ctor
~Derived(); // dtor
void MakeSomething();
private:
// some private stuff
}
现在我们进入主目录。这工作正常:
// ...
Derived derived;
derived.MakeSomething();
// ...
相反,这不起作用:
// ...
boost::shared_ptr< Base > derived(new Derived);
derived->MakeSomething();
// ...
编译器说:
我知道还没有,实际上我想调用
Derived
的方法!我在继承和指针方面缺少什么?其他问题:
MakeSomething()
中声明虚拟的Base
,因为Base
属于我可以从其继承的第三方库。 boost::shared_ptr< Base >
,我不能直接使用boost::shared_ptr< Derived >
; 最佳答案
使用时:
boost::shared_ptr< Base > derived = ...;
您只能访问通过
Base
在derived
中声明的函数。最简单的类比是使用原始指针。Base* ptr = new Derived;
即使
ptr
指向Derived
,您也无法通过指针访问Derived
的成员函数。您的选择是(我能想到的):
virtual
和Base
成员函数Derived
或dynamic_cast
可获得指向Derived
的指针。 关于c++ - 通过解引用boost::shared_ptr找不到派生类的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32637278/