繁体   English   中英

当想要push_back向量列表时,shared_ptr的向量导致错误:“没有重载函数的实例”

[英]Vector of shared_ptr resulting in error: “no instance of overloaded function” when wanting to push_back vector list

我有一个基类的智能指针,以防止像这样的对象切片:

vector<shared_ptr<BaseClass>> vectorOfObjects;

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

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

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

采用

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

有许多构造函数声明允许从std::shared_ptr<DerivedClass>std::shared_ptr<BaseClass>


从您的评论中

如果我需要单独声明,因为我的BaseClass中也有一个向量成员,我如何单独声明一个derivedObject,就像我之前尝试过的那样?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM