2014-10-11 4 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은 필요하지 않습니다. pQVector 유형의 객체이고 포인터가 아닌 은 QVector에 default-constructor이 있으므로 자동으로 초기화됩니다.

1

정적으로 할당 된 구성원으로 선언했기 때문에 QVector을 동적으로 할당 (new) 할 필요가 없습니다.

0

QVector에 QVector *를 지정하고 있습니다. 쓰기

QVector p;

이면 충분하지만 멤버 변수 p는 이미 QVector입니다. PIMPL 관용구를 사용하기 때문에 성능이 크게 저하되지 않으면 서 QVectors를 복사 할 수 있습니다. 복사본은 쓰기시 복사입니다. 즉, 복사본을 수정해도 원본이 수정되지는 않지만 사본은 새 파일을 쓰거나 크기를 조정할 때만 발생합니다.