QVector 与具有参数的自定义对象?
Posted
技术标签:
【中文标题】QVector 与具有参数的自定义对象?【英文标题】:QVector with custom objects that have arguments? 【发布时间】:2014-06-19 11:23:09 【问题描述】:我正在尝试将 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 与具有参数的自定义对象一起使用?
【问题讨论】:
与标准容器一样,您需要为 QVector 提供默认的可构造类型。 @πάνταῥεῖ C++11 标准容器不需要默认构造项。对物品的要求特定于您使用容器的方式。例如,如果您可以坚持使用emplace_
而不是 push_
方法,std::list
甚至不需要可复制的项目。
No matching call to default constructor, when using QVector的可能重复
【参考方案1】:
问题是 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);
【讨论】:
【参考方案2】:在QVector constructor中提供非默认参数
示例:以下创建 10 个具有相同 Name
、Position
、Time
的 RoutineItem
元素
QVector<RoutineItem> foo(10, RoutineItem("name", 123, 100 ));
^ ^ ^
| | |
+-----+-----+-----Provide arguments
【讨论】:
【参考方案3】:如果您愿意使用 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
。
【讨论】:
以上是关于QVector 与具有参数的自定义对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在flutter中将具有文档ID的自定义对象设置为firestore中的集合?
Swift:如果数组的自定义对象元素具有相同的键,则合并它们