获取由另一个类成员封装的指针类成员列表的索引值,这是一个指针

问题描述:

这对我来说有点奇怪。获取由另一个类成员封装的指针类成员列表的索引值,这是一个指针

我有一个指向类成员(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的指针索引的正确方法是什么?

因为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