2015-11-04 61 views
2

所以我有这样的代码行:的std ::对被调用默认的构造函数为其成员之一

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

我该如何解决这个问题?

+5

从Qt的参考:*“存储在不同的容器中的值可以是任意分配的数据类型,以确定是否符合,类型必须提供一个默认的构造函数,一个拷贝构造函数和一个赋值运算符。“* –

+0

[这可能会在C++ 17中修复。](http://en.cppreference.com/w/cpp/utility/对/对) – dasblinkenlight

+0

@PiotrSkotnicki是的,这是问题所在。切换到'std :: vector',现在一切正常。谢谢。 –

回答

3

作为commented by Piotr Skotnicki,该值类型存储在QVectorQt Standard specifies,以及任何其他的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; 
相关问题