我有一個類shared_ptr數據成員。下面是一個例子shared_ptr與地圖(錯誤錯誤C2664)
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> *
但我不知道我在哪裏做這個。可以請某人指導爲什麼會發生這種情況?
謝謝。
'但我不確定我在做什麼'我們也沒有發佈*完整的*但是最小的例子重複錯誤。但是,爲什麼要編寫用戶定義的賦值運算符並複製ctor?默認的對你的班級來說非常好。 – PaulMcKenzie
我認爲問題可能是'A(const A&source);'和'A&operator =(const A&source)'。你需要移動構造函數和賦值 –