我已经编写了自己的课程,并且希望将其插入地图。请参见下面的示例:
#include <iostream>
#include <string>
#include <map>
#include <memory>
#include <mutex>
template <class T>
class A {
public:
T a;
A() = default;
~A() = default;
A(T i) { a = i; }
};
int main()
{
std::pair<int,A<int>> p;
p = std::make_pair<int,A<int>>(9,A<int>(1));
std::map<int, A<int>> m;
m.emplace(1,A<int>(1));
}
当我尝试对此进行编译时,我遇到了一个巨大的错误。请帮助解释。 :)
在这里看到错误: http://cpp.sh/9nc35
编辑: 我有错字,谢谢!但是,我最初遇到的另一个问题现在出现了。好像是因为互斥锁?为什么?
答案 0 :(得分:1)
您的地图定义为:
std::map<int, std::unique_ptr<A<int>>>
但是在下一行中,您尝试将std::pair<int, A<int>>
传递给m.emplace()
作为密钥。
我想你只是想做:
m.emplace(9, std::make_unique<A<int>>(1));
// ^
// Not `p`
答案 1 :(得分:0)
您正在尝试将对(对<...>,A)插入/放置对(同时已将其键指定为int)。您最可能希望使用m.emplace(9,std::make_unique<A<int>>(1));
(而不是9
参见p
)或只是m.insert(p);
(在cpp.sh中可以正常工作)。
此外,您在此处使用unique_ptr
很可能是错误的/不必要的,只会使事情复杂化。请参见此处的固定示例:http://cpp.sh/3d2hw
此外,您可以研究STL集合/在https://en.cppreference.com上查看一些基本示例(对于某些地图构造示例,请参见https://en.cppreference.com/w/cpp/container/map/map)。