vectorOfObjects; 我想通过一个函数传递这个对象,然后将派生对象添加到 vector 列表中: function(vecto-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:32:05 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com