相关疑难解决方法(0)

QVector对默认构造函数的要求是什么原因?

我可以看到这些类被视为调用默认构造函数所需的复杂对象:

void QVector<T>::defaultConstruct(T *from, T *to)
{
    if (QTypeInfo<T>::isComplex) {
        while (from != to) {
            new (from++) T();
        }
    ...
}
Run Code Online (Sandbox Code Playgroud)

但目前尚不清楚为什么需要在QVector的"隐藏"区域构建对象.我的意思是这些对象根本不可访问,那么为什么不保留内存而不是真正的对象创建呢?

作为奖励的问题,我想问一下,如果我想有非默认constractible对象的数组,可我安全地更换QVector<T>QVector<Wrapper<T>?在哪里Wrapper是这样的:

class Wrapper {
public:
    union {
        T object;
        bool hack;
    };
    Wrapper() {}
    Wrapper(const T &t) : object { t }  {}
    Wrapper(const Wrapper &t) : object { t.object } {}

    Wrapper &operator=(const Wrapper &value) {
        object = value.object;
        return *this;
    }

    ~Wrapper() {}
};
Run Code Online (Sandbox Code Playgroud)

c++ qt containers qvector

7
推荐指数
1
解决办法
1069
查看次数

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++ qt constructor struct qvector

5
推荐指数
1
解决办法
405
查看次数

QVector与自定义对象有参数?

我正在尝试将QVector与名为RoutineItem的自定义对象一起使用.

但是给出了这个错误:

C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265: error: no matching function for call to 'RoutineItem::RoutineItem()'
Run Code Online (Sandbox Code Playgroud)

这是RoutineItem构造函数:

RoutineItem(QString Name,int Position,int Time,bool hasCountdown = false,bool fastNext = false);
Run Code Online (Sandbox Code Playgroud)

如果我删除所有构造函数参数,我不再得到该错误.如何将QVector与具有参数的自定义对象一起使用?

c++ qt vector qvector

1
推荐指数
1
解决办法
2689
查看次数

标签 统计

c++ ×3

qt ×3

qvector ×3

constructor ×1

containers ×1

struct ×1

vector ×1