我有一个带有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> *
但我不知道我在做什么。可以请某人指导为什么会发生这种情况吗?
感谢。
答案 0 :(得分:4)
问题(或至少有一个)在行
中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) { }
答案 1 :(得分:0)
我修复了部分代码:
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;
}