给出以下代码:
std::map<std::string, std::unique_ptr<Obj>> objs;
std::string str;
Obj obj;
std::unique_ptr<Obj> objUniquePtr = std::unique_ptr<Obj>(new Obj(obj));
objs.insert({ str, objUniquePtr }); <<<<<<<< ERROR
我收到以下错误:
no matching function for call to 'std::map<std::__cxx11::basic_string<char>, std::unique_ptr<Obj> >::insert(<brace-enclosed initializer list>)'
如何修复此错误?
最佳答案
您正在尝试复制构造 std::unique_ptr
,这是不允许的,因为 std::unique_ptr
无法复制构造。 Move 构造它并使用 emplace
成员函数,以确保不会发生 std::unique_ptr
的复制构造:
objs.emplace({str, std::move(objUniquePtr)}); //notice the move operation
这将解决您的错误。只需确保在移动操作后不要尝试访问或取消引用 objUniquePtr
,因为您将尝试取消引用 nullptr
。
关于c++ - 如何修复此错误 'no matching function for call' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64055744/