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
。尽管p
是QVector
类型的对象而不是指向它的指针,但p
会自动初始化,因为QVector
有一个默认构造函数。
【讨论】:
【参考方案3】:您正在将 QVector * 分配给 QVector;写作
Q向量p;
够了,你的成员变量 p 已经是一个 QVector。 您可以复制 QVectors 而不会因为使用 PIMPL 惯用语而对性能造成太大影响。副本是写入时复制,这意味着修改副本不会修改原始副本,但是副本只会在您写入(或调整大小)新副本时发生。
【讨论】:
以上是关于QVector 与 'operator=' 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
Valarray 切片数组与 'operator*' 不匹配
错误:与 'operator=' 不匹配。试图从基类继承并从基类初始化?
QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)
C ++向量 - 查找(“'operator =='不匹配”)