QVector не соответствует 'operator='

У меня проблема с инициализацией 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 *>();
         ^

Я не знаю, в чем проблема.


person baumlol    schedule 11.10.2014    source источник
comment
Хватит писать на Java. В C++ new предназначен для динамического выделения памяти, а не для создания объектов общего назначения. В этом отношении создание объекта происходит в списке инициализаторов конструктора, а не в его теле.   -  person Ben Voigt    schedule 11.10.2014


Ответы (3)


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

person Columbo    schedule 11.10.2014

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

person Oleg Shparber    schedule 11.10.2014

Вы присваиваете QVector * QVector; пишу

QВектор p;

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

person Manuel Odendahl    schedule 11.10.2014