QVector与自定义对象有参数
QVector with custom objects that have arguments?
我正在尝试使用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
, Time
的RoutineItem
元素
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
中工作。
相关文章:
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Arduino C++在构造函数中用参数声明对象数组
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- C++ 类对象作为函数参数
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 如何编写将展开以定义具有模板参数的对象的宏
- C++类对象 - 遍历基于参数的对象
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 是否可以获取成员函数模板参数的拥有对象?
- C++多参数对象创建
- 在不创建参数对象的情况下解析constexpr函数
- 推断模板参数对象成员的类型
- 如何解析c++ v8中的参数对象
- 当默认参数对象被销毁时
- 为什么函数不能更改其参数对象的地址/引用值?