2014-10-11 65 views
0

我在初始化類構造函數中的QVector時遇到了問題。這是在我的頭文件行:QVector不匹配'operator ='

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 *>(); 
     ^

我不知道有什麼問題。

+0

停止編寫Java。在C++中,'new'用於動態內存分配,而不是通用對象創建。對於這個問題,對象創建發生在構造函數的初始化列表中,而不是它的主體。 – 2014-10-11 16:23:15

回答

0

這裏不需要new。儘管pQVector類型的對象,並且不是指向它的指針,但p會自動初始化,因爲QVector有一個默認構造函數。

1

因爲您將其聲明爲靜態分配成員,所以不需要動態分配QVector(與new一起)。

0

您正在將QVector *分配給QVector;書寫

QVector p;

就夠了,你的成員變量p已經是QVector了。 由於使用PIMPL慣用法,您可以複製QVectors而不會產生太大的性能影響。副本是在寫入時複製的,這意味着修改副本不會修改原始副本,但副本只會發生在您寫入(或調整)新副本的位置。