2012-01-20 37 views
0

這對我來說有點奇怪。獲取由另一個類成員封裝的指針類成員列表的索引值,這是一個指針

我有一個指向類成員(mGeometry)的指針,該成員又指向QList<GLushort>數據成員(mFaces)。我試圖通過Cube類獲得mFaces的索引。

所以,更簡化的版本是這樣的:

struct Geometry 
{ 
    Geometry(void); 
    ~Geometry(void); 
    void someFunc(void); 
    QList<GLushort> *mFaces; 
}; 

class Cube 
{ 
public: 
    Cube(void); 
    ~Cube(void); 
    void anotherFunc(void); 
    Geometry *mGeometry; 
}; 

比方說,在anotherFunc,我們正在努力做到以下幾點:

GLushort *indeces = new GLushort; 

*indeces = (*mGeometry).mFaces[ 0 ]; 

錯誤(S )

error: cannot convert ‘QList<short unsigned int>’ to ‘GLushort {aka short unsigned int}’ in assignment 

因此,我們嘗試:

*indeces = mGeometry->(*mFaces)[ 0 ]; //which, is originally how I've accessed pointers-to-containers' indexes. 

錯誤(S)

error: expected unqualified-id before ‘(’ token 

error: ‘mFaces’ was not declared in this scope 

,當然,很明顯的:

*indeces = mGeometry->mFaces[ 0 ]; 

錯誤(S )

error: cannot convert ‘QList<short unsigned int>’ to ‘GLushort {aka short unsigned int}’ in assignment 

構造幾何

Geometry::Geometry(void) 
    : mFaces(new QList<GLushort>) 
{ 
} 

有什麼問題,我在這裏幹什麼?如果不是,獲得指向mFaces的指針索引的正確方法是什麼?

回答

4

因爲mFaces是一個指針,你必須取消引用mGeometry->然後解引用mFaces*然後使用QList<>operator[]獲得數:

*indeces = (*mGeometry->mFaces)[0]; // note that * has lower precedence than -> 
            // so this is like (*(mGeometry->mFaces))[0] 

這是一個有點古怪,因爲[0]做同樣的事情作爲*。在指針類型的指數,如x[i],按照公式*(x + i),所以你也可以做到這一點達到相同的效果(但沒有):

*indeces = mGeometry->mFaces[0][0]; // or *indeces = (*mGeometry).mFaces[0][0]; 

這是一樣的(*(mFaces + 0))[0],這是完全一樣的作爲(*mFaces)[0]

這也是爲什麼,當你試圖做

(*mGeometry).mFaces[ 0 ]; 

因爲(*mGeometry).mFaces[ 0 ];(再次,相當於上述*mGeometry->mFaces)讓你一個QList<GLushort>得到了錯誤cannot convert ‘QList<short unsigned int>’ to ‘GLushort’,你必須使用operator[]QList<>以獲取您的數據。

而現在完全無關的東西,你拼錯指數 :)

+0

啊,謝謝。無可否認,我從網上找到的一個文件('render.cpp' - 也許你聽說過這個文件)發現了這個問題,並且改變了一些東西以提高效率。我再次感謝它。 :) – zeboidlund