【问题标题】:QVector no match for 'operator='QVector 与 'operator=' 不匹配
【发布时间】:2014-10-11 16:13:55
【问题描述】:

我在类构造函数中初始化 QVector 时遇到问题。这是我的头文件中的行:

QVector<Person *> p;

这是我的构造函数中的行:

this->p = new QVector<Person *>();

这是错误:

Error: no match for 'operator=' (operand types are 'QVector<Person*>' and 'QVector<Person*>*')
 this->p = new QVector<Person *>();
         ^

我不知道是什么问题。

【问题讨论】:

  • 停止编写 Java。在 C++ 中,new 用于动态内存分配,而不是通用对象创建。就此而言,对象的创建发生在构造函数的初始化列表中,而不是它的主体中。

标签: c++ qt constructor header qvector


【解决方案1】:

您不需要动态(使用new)分配QVector,因为您将其声明为静态分配的成员。

【讨论】:

    【解决方案2】:

    这里不需要new。尽管pQVector 类型的对象而不是指向它的指针,但p 会自动初始化,因为QVector 有一个默认构造函数。

    【讨论】:

      【解决方案3】:

      您正在将 QVector * 分配给 QVector;写作

      Q向量p;

      够了,你的成员变量 p 已经是一个 QVector。 您可以复制 QVectors 而不会因为使用 PIMPL 惯用语而对性能造成太大影响。副本是写入时复制,这意味着修改副本不会修改原始副本,但是副本只会在您写入(或调整大小)新副本时发生。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        相关资源
        最近更新 更多