簡體   English   中英

帶地圖的shared_ptr(錯誤錯誤C2664)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM