std :: pair正在为其中一个成员调用默认构造函数

时间:2015-11-04 11:03:57

标签: c++ qt c++11 stl std-pair

所以我有这个代码行:

statesArray.push_back(std::pair<States, StateSettings>(States::funMode, StateSettings(1, 2, 3, 4, 5, 6)));

statesArrayQVector<std::pair<States, StateSettings> >类型的对象。

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试图调用已删除的默认构造函数,如果我传递一个使用一个非默认构造函数显式构造的对象?

我怎么解决这个问题?

1 个答案:

答案 0 :(得分:3)

作为commented by Piotr SkotnickiQVector中存储的值类型的Qt Standard specifies以及任何其他Qt Generic容器必须:

  

具有任何可分配的数据类型。要限定,类型必须提供默认构造函数,复制构造函数和赋值运算符。

问题中指定的值类型显然不符合这些资格。

解决这个问题的一种可能方法是存储指向值的指针:

QVector<std::pair<States, StateSettings>*> statesArray;