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)));

statesArrayQVector<std::pair<States, StateSettings> >.

类型的对象

StateSettings class 有这两个构造函数(从 中删除了默认的构造函数):

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

如何解决这个问题?

因为 , the Qt Standard specifies 存储在 QVector 和任何其他 Qt 通用容器中的值类型必须:

Be of any assignable data type. To qualify, a type must provide a default constructor, a copy constructor, and an assignment operator.

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

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

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