我刚刚对一个项目进行了大规模重构,以添加一个基类来代替现在所说的基类的派生类(因为我想要这个类的更多“类型”)。
我的问题是,一些实用函数将原始类 A 的引用作为 shared_ptr ,因此函数声明如下所示:
void UtilityClass::func(shared_ptr<A> &a);
但是现在我有了新的基类 B 并且 A 是从 B 派生的(以及从 B 派生的新类 C),当我尝试传递 A 或 C 的实例时出现编译时错误到现在声明为的函数:
void UtilityClass::func(shared_ptr<B> &b);
如果我尝试通过:
shared_ptr<A> a;
utilclass.func(a);
我收到一个编译时错误,说(释义):
无法将参数 1 从 'std::shared_ptr<_Ty>' 转换为 'std::shared_ptr<_Ty>'
但我不确定我还能如何解决这个问题,func() 将 A、B 或 C 实例添加到 shared_ptr 值的 std::vector 中。
谢谢你的时间。
编辑:我还有另一个函数,它接受一个引用,以便它可以为它分配一个新的 B 实例,然后返回它。