std::pair正在为其成员之一调用默认构造函数
std::pair is calling the default constructor for one of its members
所以我有这个代码行:
statesArray.push_back(std::pair<States, StateSettings>(States::funMode, StateSettings(1, 2, 3, 4, 5, 6)));
1是CCD_ 2类型的对象。
StateSettings
类有这两个构造函数(默认的构造函数被删除):
StateSettings() = delete;
StateSettings(int a, int b, int c, int d, int e = 0, int f = 0);
编译时,我得到了这个错误:
Error 2 error C2280: 'StateSettings::StateSettings(void)' : attempting to reference a deleted function.
如果我向std::pair
传递一个用一个非默认构造函数显式构造的对象,为什么CCD_4试图调用已删除的默认构造函数?
我如何解决这个问题?
正如Piotr Skotnicki所评论的,Qt标准规定存储在QVector
和任何其他Qt通用容器中的值类型必须:
可以是任何可赋值的数据类型。若要进行限定,类型必须提供默认构造函数、复制构造函数和赋值运算符。
问题中指定的值类型显然不符合这些条件。
绕过这个问题的一种可能方法是存储指向值的指针:
QVector<std::pair<States, StateSettings>*> statesArray;
相关文章:
- 如何在C++中调用默认模板功能参数?
- 为什么即使我调用参数化构造函数也会调用默认构造函数?
- 没有用于调用默认构造函数的匹配函数
- 为什么指针对象没有调用默认构造函数
- 调用默认构造函数时不引用它
- 为什么我的对象声明不调用默认构造函数?
- 为什么要尝试调用默认构造函数?
- 在创建对象向量时,不为每个对象唯一调用默认对象构造函数
- std::map 在 [] 上调用默认构造函数,在 insert() 上调用复制构造函数
- 是否可以从移动构造函数调用默认构造函数?
- 为什么类型变量;不调用默认 CTR
- 声明对象而不调用默认构造函数
- 作为参数的空初始值设定项列表不调用默认构造函数
- 如果类划分为单独的文件,则不调用默认构造函数
- 为什么"S x({})"仅在GCC 7/C++1z模式下调用默认构造函数?
- C++ 继承基构造函数,但仍调用默认派生构造函数
- 在返回语句中调用默认构造函数
- 在构造函数参数中调用默认构造函数
- 如何防止在基类初始化器中调用默认构造函数?
- 如何在以下C 代码中在同一对象上调用默认值和复制构造函数