【发布时间】:2018-09-11 03:36:55
【问题描述】:
我很困惑为什么这不起作用。我一定是误解了 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' : no appropriate default constructor available
我可以使用ChunkRequest req(1, 2); 创建一个ChunkRequest 变量,但是一旦我尝试将它附加到我的QVector 就会抛出错误。
我很困惑为什么。
编辑: 在阅读了您的 cmets 之后,我很清楚 QVector 需要一个默认构造函数来确定数组中每个元素的大小。但这并不能说明原因。
如果一个结构有一定数量的成员并且每个成员在内存中都有一个已知大小(甚至指向动态内存的指针也是已知大小),那么我不明白为什么 QVector 需要默认构造函数?大小应该在编译时就知道了……对吧?
【问题讨论】:
-
@MrEricSir 谢谢!所以看起来 QVector 需要一个默认构造函数来确定内存中每个元素的大小?所以要么我创建一个默认构造函数,要么在堆上创建每个元素。谢谢:)
-
的确,是的,动态内存有效!
-
虽然我确实发现这是 QVector 的一个奇怪要求。结构具有一定数量的成员......直接变量或指向堆分配值的指针。所以我不明白为什么 QVector 需要一个默认的构造函数来确定大小?
-
@mrg95 这有点隐藏在文档中,但a default constructor is required。每当您在 C++ 中提供构造函数时,它都会清除默认构造函数,这意味着您可能必须提供自己的构造函数(即使它是无操作的)。这只是该语言的一个怪癖。
标签: c++ qt struct constructor qvector