2011-11-18 77 views
2

我有是這樣定義的函數的參數變量的QVector:修改爲指針傳遞QVectors

QVector< QVector<qreal> > *var; 

在代碼的某一點上,我想這樣做:

*var[i][j] = some_value. 

然而,這並不編譯,因爲

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

如何正確地引用值,以便爲m odified? (我們的想法是,在函數傳遞參數真的修改。)

回答

4

你需要把*var括號:

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

雖然你爲什麼要使用一個指向QVector?由於QVector是Qt通用容器系列的一部分,因此它使用隱式共享。這意味着,如果你通過值傳遞,你只會執行一個淺拷貝,也就是說你只能通過數據結構的瘦簿管理部分 - 一個指向較大塊的指針其他地方存在的數據。

+0

我不知道。我想避免的是複製整個結構,並且在返回時不得不復制整個結構。如果我通過價值,那麼整個副本沒有完成?謝謝! – aarelovich

+0

沒有,只有數值傳遞纔會複製'QVector'的'簿記'數據(無論QVector的內容類型或它包含多少項目),Windows上有5個int和1個long。有關更多信息,請參閱[隱式共享的Qt文檔](http://doc.qt.nokia.com/stable/implicit-sharing.html)。 – sjwarner

+0

非常感謝!我會改變它,因爲我更喜歡非指針方法 – aarelovich