c++ - 如何修复此错误 'no matching function for call' ?

标签 c++ c++11 compiler-errors unique-ptr

给出以下代码:

    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/

相关文章:

c++ - FastDelegate 的 Variadic 版本和额外的值拷贝

c++ - 在windows上的ubuntu中执行.sh文件

c++ - 使用 C++ 读取 HTML 文本

java - <identifier> 创建对象列表时出现预期错误

c - 如何处理头文件中的函数定义?

c++ - 在 C++ 中使用指针按引用传递数组

c++ - 在 luabind 中返回指向派生对象的指针时出现泄漏问题或 'unregistered class'

c++ - 编译器是否优化 C++ 中静态值的 if 语句

c++11 - 嵌套列表初始化如何转发其参数?

c++ - 尝试使用新构造函数和复制构造函数分配内存时获取 "expected unqualified-id before ‘(’ token