我非常困惑为什么这不起作用。我一定是对QVectors的某个关键点有误解...
我创建了一个MCVE来展示这个问题:
#include <QCoreApplication>
#include <QVector>
struct ChunkRequest
{
ChunkRequest(int x, int z)
{
this->x = x;
this->z = z;
}
int x;
int z;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVector<ChunkRequest> requestedChunks;
requestedChunks.append(ChunkRequest(1, 2));
return a.exec();
}
编译出错,错误信息为“C2512: 'ChunkRequest' : 没有可用的默认构造函数”。我可以使用“ChunkRequest req(1, 2);”创建一个“ChunkRequest”变量,但是一旦我尝试将其附加到我的“QVector”中,就会抛出错误。对此我感到困惑。
编辑: 阅读您的评论后,我明白了QVector需要一个默认构造函数才能确定数组中每个元素的大小。但这并不能解释为什么。 如果一个结构体有一定数量的成员,并且每个成员在内存中有已知的大小(甚至动态内存的指针也是已知的大小),那么我不明白为什么QVector需要一个默认构造函数?大小应该在编译时就已知……对吗?
int
这样的基本类型没有默认值。如果QVector
需要分配额外的元素,那么就需要调用默认构造函数来为成员变量提供值,这一点很重要。 - MrEricSirQVector
在分配空间时实际上会创建额外的元素。我以为它只是分配了空间...... 谢谢你的帮助 :) 如果你愿意,可以将此作为答案发布,我会接受它。 - mrg95