将派生类shared_ptr作为参数传递给需要基类shared_ptr的函数

pon*_*cho 0 c++ inheritance shared-ptr visual-c++

我只是通过一个项目的大规模重构来添加一个基类来代替现在所谓的基类的派生类(因为我想要这个类的更多"类型").

我的问题是,一些实用程序函数将原始类A的引用作为shared_ptr,因此函数声明如下所示:

void UtilityClass::func(shared_ptr<A> &a);
Run Code Online (Sandbox Code Playgroud)

但是现在我有了新的基类B和A是从B派生的(以及从B派生的新类C)当我尝试传递A或C的实例时,我遇到编译时错误到现在声明的函数:

void UtilityClass::func(shared_ptr<B> &b);
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过:

shared_ptr<A> a;
utilclass.func(a);
Run Code Online (Sandbox Code Playgroud)

我得到一个编译时错误说(释义):

无法将参数1从'std :: shared_ptr <_Ty>'转换为'std :: shared_ptr <_Ty>'

但是我不知道我怎么解决这个问题,func()将A,B或C实例添加到shared_ptr值的std :: vector中.

谢谢你的时间.

编辑:我还有另一个函数,它接受一个引用,以便它可以为它分配一个新的B实例,然后返回它.

Mik*_*our 5

问题是你通过非const引用传递,这意味着你需要参数类型完全匹配.

更改函数以按值或const引用获取指针; 然后可以将隐式转换(例如shared_ptr<Derived>to shared_ptr<Base>)应用于参数.