簡體   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