Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 非法使用已删除的函数_C++_C++11_C++14_Deleted Functions - Fatal编程技术网

C++ 非法使用已删除的函数

C++ 非法使用已删除的函数,c++,c++11,c++14,deleted-functions,C++,C++11,C++14,Deleted Functions,我有一个甲级 struct A { A() = delete; A(const A&) = default; A& operator=(const A&) = default; A(A&&) = default; A& operator=(A&&) = default; explicit A(int i) .... // a few explicit constructors

我有一个甲级

struct A
{
    A() = delete;
    A(const A&) = default;
    A& operator=(const A&) = default;
    A(A&&) = default;
    A& operator=(A&&) = default;

    explicit A(int i) ....
    // a few explicit constructors
}
当我试图获取存储在无序图中的struct A时,如下所示:

auto a = my_map[key_];
我明白了

非法使用已删除的方法

错误。 我的理解是这是一个复制构造,但我不知道为什么编译器在赋值之前调用默认构造函数。

来自:

映射的类型必须满足CopyConstructible和DefaultConstructible的要求

由于默认构造函数被删除,编译器会正确地报告错误

在链接页面的下方:

返回值

如果不存在具有键的元素,则引用新元素的映射值。否则,将引用其键等效于键的现有元素的映射值

如果不存在具有给定键的元素,则函数将插入新元素。需要默认构造函数才能插入新元素。

来自:

映射的类型必须满足CopyConstructible和DefaultConstructible的要求

由于默认构造函数被删除,编译器会正确地报告错误

在链接页面的下方:

返回值

如果不存在具有键的元素,则引用新元素的映射值。否则,将引用其键等效于键的现有元素的映射值


如果不存在具有给定键的元素,则函数将插入新元素。需要默认构造函数才能插入新元素。

映射的
运算符[]
要求值类型具有默认构造函数,以便在键不存在的情况下创建条目。您应该做的是类似于
autoi=my\u map.find(key\u);如果(i!=my_-map.end()){auto&val=i->second;…}或者{handle_-non_-existence_-key()}
阅读:“当使用默认分配器时,这意味着键类型必须是可移动的,映射的键类型必须是可默认构造的。”映射的
操作符[]
要求值类型具有默认构造函数,以便在键不存在时创建条目。您应该做的是类似于
autoi=my\u map.find(key\u);如果(i!=my_-map.end()){auto&val=i->second;…}或者{handle_-non_-existence_-key()}
阅读:“使用默认分配器时,这意味着键类型必须是可移动构造的,而映射的键类型必须是可默认构造的。”