2011-11-18 4 views
2

포인터로 전달 QVectors의 QVector 수정 : 나는이 작업을 수행 할 코드의 특정 지점에서I는 다음과 같이 정의 된 함수의 인수에 변수가

QVector< QVector<qreal> > *var; 

을 :

를 내가 제대로 값을 참조하려면 어떻게

error: no match for ‘operator*’ in ‘*(var + ((long unsigned int)(((long unsigned int)row) * 8ul)))->QVector::operator[] with T = QVector’

있기 때문에 m가되도록

*var[i][j] = some_value. 

그러나이 컴파일되지 않습니다 odified? (아이디어는 함수에 전달 된 매개 변수가 정말 수정 될 수 있습니다.)

답변

4

당신은 괄호로 *var을 둘 필요 : 왜 당신이 QVector에 대한 포인터를 사용하고 있지만

(*var)[i][j] = some_value; 

? QVector은 Qt의 일반 컨테이너 패밀리의 일부이므로 암시 적 공유를 사용합니다. 즉, 대신에 값을 전달하면 얕은 복사본 만 수행하게됩니다. 즉, 데이터 구조의 얇은 책 관리 부분 (실제로는 더 큰 블록에 대한 포인터)을 전달하는 것입니다. 다른 곳에있는 데이터의

+0

나는 그것을 몰랐다. 제가 피하고 싶었던 것은 전체 구조체를 복사하고 그것을 반환 할 때 전체 구조체를 다시 복사해야한다는 것입니다. 가치를 지키면 전체 사본이 완성되지 않습니까? 고맙습니다! – aarelovich

+0

아니요, 값으로 전달하면 QVector의 '부기'데이터 ('QVector'의 콘텐츠 유형이나 포함 된 항목의 수에 관계없이 Windows에서는 다섯 개의 int 및 long이 하나) 만 복사됩니다. 자세한 내용은 [암시 적 공유에 대한 Qt 문서] (http://doc.qt.nokia.com/stable/implicit-sharing.html)를 참조하십시오. – sjwarner

+0

대단히 감사합니다! 비 포인터 접근 방식을 선호하므로 변경하겠습니다. – aarelovich