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

std::pair is calling the default constructor for one of its members

本文关键字:调用 默认 构造函数 成员 pair std      更新时间:2023-10-16

所以我有这个代码行:

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;