c++ - 导致错误: "no instance of overloaded function" when wanting to push_back vector list的shared_ptr vector

标签 c++ vector shared-ptr derived-class

我有一个基类的智能指针来防止对象切片,如下所示:

vector<shared_ptr<BaseClass>> vectorOfObjects;

我想通过函数传递这个对象,然后将派生对象添加到 vector 列表中:

function(vector<shared_ptr<BaseClass>>& vectorOfObjects) {}

在此函数中,我创建一个新的派生对象,并将其添加到列表中:

DerivedClass derivedObject = DerivedClass();

vectorOfObjects.push_back(&derivedObject);

我在上面最后一行的点下收到错误

no instance of overloaded function std::vector<_Ty,_Ax>::pushback
 [with _Ty="std::tr1::shared_ptr<BaseClass>,_Ax=std::allocator<std:
:tr1::shared_ptr<BaseClass>>]" matches the argument list

任何帮助都将非常感激,因为我似乎找不到正确的解决方案来通过函数传递由对象指针组成的 vector (防止对象切片所需)。

最佳答案

使用

// DerivedClass derivedObject = DerivedClass(); <<< Not needed
vectorOfObjects.push_back(std::make_shared<DerivedClass>());

有多个 constructor declarations允许从 std::shared_ptr<DerivedClass> 进行转换至std::shared_ptr<BaseClass> .


从您的 comment 开始

If I need to make a separate declaration, as I also have a vector member in my BaseClass, how can I declare a derivedObject separately as I have attempted earlier?

我并不完全清楚“因为我的 BaseClass 中也有一个 vector 成员”与它有什么关系,但如果你坚持这样做,你可以这样做:

DerivedClass derivedObject* = new DerivedClass();
// Do special stuff only available in DerivedClass
derivedObject->specialFunc();
vectorOfObjects.push_back(std::shared_ptr<DerivedClass>(derivedObject));

关于c++ - 导致错误: "no instance of overloaded function" when wanting to push_back vector list的shared_ptr vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36825466/

相关文章:

c++ - 具有返回类型的构造函数,或当前类名的非法重新定义

c++ - 实现前缀运算符++

c++ - 如何使用 boost.asio 解析 ftp 站点?

c++ - 类中的 std::vectors

c++ - boost shared_from_this 和析构函数

c++ - 将结构传递给函数并在其中输入数据

c++ - (C++) 用于检查对象是否在 vector/数组/列表/...中的模板?

c++ - 从 vector 的 vector 中的列获取最小值和最大值

c++ - 如何在 C++ 中创建 shared_ptr 列表?

c++ - C++ make_shared 可以用在数组上吗?