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;
}
相关文章:
- 使用解算器SparseLU并获得错误C2664
- VS 2017 错误 C2664 地图插入尝试
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 编译器错误 C2664 使用 std::map 和自定义类作为其值
- 如何在 VC++ 中通过引用传递另一个对象的方法(错误 C2664)
- 在C++中构造模板函数时出现编译错误 C2664 和 C2440
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- 错误 C2664 和 E0167 被难倒
- 尝试创建unique_ptr时出现错误 C2664
- 错误 C2664:"errno_t wcstombs_s(size_t *,字符 *,size_t,常量 wchar_t *,size_t)":无法转换参数 4
- 错误C2664:无法转换参数错误
- 在集合中转换为小写 C++ 错误 C2664
- 错误 C2664:无法将参数 1 从 'int' 转换为 'int []'
- 将互斥锁数组传递给函数时出现错误 C2664
- 错误 C2664:"发送":无法将参数 2 从"服务器问候语"转换为"常量字符 *"
- 错误C2664:无法转换参数(指纹传感器检测)
- C++ 错误 1 错误 C2664 传递数组指针
- 错误 C2664:'CComboBox::InsertString':无法将参数 2 从 'const char [4]' 转换为 'LPCTSTR'
- 创建面向对象的链表时出现编译问题(编译器错误C2664)