mrg*_*g95 5 c++ qt constructor struct qvector
我很困惑为什么这不起作用.我必须误解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();
}
Run Code Online (Sandbox Code Playgroud)
编译会抛出错误 C2512: 'ChunkRequest' : no appropriate default constructor available
我能够创建一个ChunkRequest
变量,ChunkRequest req(1, 2);
但是一旦我尝试将它附加到我QVector
的错误抛出.
我有理由感到困惑.
编辑:在阅读您的评论之后,我很清楚QVector需要一个默认构造函数来确定数组中每个元素的大小.但这并没有回答为什么.
如果一个struct有一定数量的成员,并且每个成员在内存中都有已知的大小(即使指向动态内存的指针是已知大小),那么我不明白为什么QVector需要一个默认的构造函数?大小应该在编译时知道......对吗?
在 C++ 中,为结构(或类)指定任何构造函数会指示编译器不要自动提供默认构造函数。这是语言的一个怪癖。
这对于容器类来说是一个问题,例如QVector
可以动态调整大小(内部或显式)的容器类。当分配新对象来填充空间时,它将调用默认构造函数 - 但如果没有可用的默认构造函数,则编译- 会出现时间错误。
该问题可以通过指定默认构造函数来解决,即使它不执行任何操作,例如:
ChunkRequest() {}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
405 次 |
最近记录: |