我正在尝试将QVector与名为RoutineItem的自定义对象一起使用。
但是给出了这个错误:
C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265: error: no matching function for call to 'RoutineItem::RoutineItem()'
这是RoutineItem构造函数:
RoutineItem(QString Name,int Position,int Time,bool hasCountdown = false,bool fastNext = false);
如果我删除所有构造函数参数,我不再会收到该错误。 如何将QVector与具有参数的自定义对象一起使用?
答案 0 :(得分:5)
问题是QVector要求元素具有默认构造函数(即关于错误消息)。您可以在班级中定义一个。例如:
class RoutineItem {
RoutineItem(QString Name, int Position,
int Time, bool hasCountdown = false,
bool fastNext = false);
RoutineItem();
[..]
};
或者,您可以让所有参数都具有默认值:
class RoutineItem {
RoutineItem(QString Name = QString(), int Position = 0,
int Time = 0, bool hasCountdown = false,
bool fastNext = false);
[..]
};
或者,您可以构造一个默认值RoutineItem并通过它初始化所有矢量项:
RoutineItem item("Item", 0, 0);
// Create a vector of 10 elements and initialize them with `item` value
QVector<RoutineItem> vector(10, item);
答案 1 :(得分:2)
示例:以下内容创建10个RoutineItem
元素,其中Name
,Position
,Time
QVector<RoutineItem> foo(10, RoutineItem("name", 123, 100 ));
^ ^ ^
| | |
+-----+-----+-----Provide arguments
答案 2 :(得分:1)
如果您愿意使用C ++ 11和std::vector
,则不再需要默认构造性:
void test()
{
class C {
public:
explicit C(int) {}
};
std::vector<C> v;
v.push_back(C(1));
v.push_back(C(2));
}
此代码无法在C ++ 11之前工作,并且无法使用QVector
。