2014-10-11 5 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' предназначен для динамического выделения памяти, а не для создания объектов общего назначения. В этом случае создание объекта происходит в списке инициализатора конструктора, а не в его теле. –

ответ

0

Здесь не нужно new. Несмотря на то, что p является объектом типа QVector, а не указателем на него, p инициализируется автоматически, так как QVector имеет конструктор по умолчанию.

1

Вам не нужно динамически (с new) выделить QVector, потому что вы объявили его как статически выделенный элемент.

0

Вы назначаете QVector * на QVector; Письмо

QVector p;

достаточно, ваша переменная-член p уже является QVector. Вы можете копировать QVectors, не допуская слишком большого удара по производительности из-за использования идиомы PIMPL. Копии копируются при записи, что означает, что изменение копии не будет изменять оригинал, однако копия будет происходить только в том месте, где вы пишете (или изменяете размер) новый.