QVector 与 'operator=' 不匹配

Posted

技术标签:

【中文标题】QVector 与 \'operator=\' 不匹配【英文标题】: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 用于动态内存分配,而不是通用对象创建。就此而言,对象的创建发生在构造函数的初始化列表中,而不是它的主体中。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

Q向量p;

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

【讨论】:

以上是关于QVector 与 'operator=' 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Valarray 切片数组与 'operator*' 不匹配

错误:与 'operator=' 不匹配。试图从基类继承并从基类初始化?

QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)

C ++向量 - 查找(“'operator =='不匹配”)

C ++重载:[错误]'operator ='不匹配(操作数类型是'String'和'String')[重复]

如何完全绕过`错误:不匹配'operator =='`?