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)));
statesArray
是 QVector<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;
所以我有这个代码行:
statesArray.push_back(std::pair<States, StateSettings>(States::funMode, StateSettings(1, 2, 3, 4, 5, 6)));
statesArray
是 QVector<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
试图调用已删除的默认构造函数,如果我向它传递一个使用一个非默认构造函数显式构造的对象?
如何解决这个问题?
因为 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;