[英]shared_ptr with map (error error C2664)
我有一個帶有shared_ptr數據成員的類。 下面是一個例子
class A {
private:
shared_ptr<map<int, std::string>> _pMap;
A();
public:
A(shared_ptr<map<int, std::string>>);
A(const A& source);
A& operator=A(const A&);
};
A::A(shared_ptr<map<int, std::string>> mapPtr)
: _pMap(new std::shared_ptr<std::map<int, std::string>>()) {
_pMap = mapPtr;
A::A(const A& source) : _pMap(source._p) {}
A& A::operator=(const A& source) {
if (this == &source) {
return *this;
}
_pMap = source._pMap;
return *this;
}
當我嘗試僅使用主程序中包含的頭來編譯程序時,收到以下錯誤:
error C2664: 'std::_Ptr_base<_Ty>::_Reset0' :
cannot convert parameter 1 from 'std::shared_ptr<_Ty> *'
to 'std::map<_Kty,_Ty> *
但是我不確定我在哪里做。 能否請某人指導為什么會發生這種情況?
謝謝。
問題(或其中至少一項)在生產線上
A::A(shared_ptr<map<int, std::string>> mapPtr) : _pMap(new std::shared_ptr<std::map<int, std::string>>()) {
_pMap = mapPtr;
它應該是
A::A(shared_ptr<map<int, std::string>> mapPtr) : _pMap(new std::map<int, std::string>()) {
_pMap = mapPtr;
但是沒有指向兩次初始化_pMap的指向-因此,對於此構造方法,最好的辦法是
A::A(shared_ptr<map<int, std::string>> mapPtr) : _pMap(mapPtr) { }
我修復了部分代碼:
class A
{
private:
shared_ptr<map<int, std::string>> _pMap;
A();
public:
A(shared_ptr<map<int, std::string>>);
A(const A& source);
};
A::A(shared_ptr<map<int, std::string>> mapPtr)
{
_pMap = mapPtr;
}
int main()
{
shared_ptr<map<int, std::string>> myMap = std::make_shared<map<int, std::string>>
();
A a(myMap);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.