QVector与自定义对象有参数

QVector with custom objects that have arguments?

本文关键字:参数 对象 自定义 QVector      更新时间:2023-10-16

我正在尝试使用QVector与一个名为RoutineItem的自定义对象。

但是给出了这个错误:

C:Qt5.2.1mingw48_32includeQtCoreqvector.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与自定义对象有参数?

问题是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的默认值,并用它初始化所有vector项:

RoutineItem item("Item", 0, 0);
// Create a vector of 10 elements and initialize them with `item` value
QVector<RoutineItem> vector(10, item);

QVector构造函数

中提供非默认实参

示例:创建10个具有相同Name, Position, TimeRoutineItem元素

QVector<RoutineItem> foo(10, RoutineItem("name", 123, 100 ));
                                            ^     ^     ^
                                            |     |     |
                                            +-----+-----+-----Provide arguments

如果您愿意使用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中工作。