获取由另一个类成员(一个指针)封装的指针类成员列表的索引值

时间:2012-01-20 20:20:13

标签: c++ arrays qt pointers indexing

这个对我来说有点奇怪。

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

1 个答案:

答案 0 :(得分:4)

由于mFaces是指针,因此您必须使用mGeometry取消引用->,然后使用mFaces取消引用*,然后使用QList<>&# 39; s 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]完全相同。

这也是您在尝试

时遇到错误cannot convert ‘QList<short unsigned int>’ to ‘GLushort’的原因
( *mGeometry ).mFaces[ 0 ];

由于( *mGeometry ).mFaces[ 0 ];(再次,相当于上述*mGeometry->mFaces)会获得QList<GLushort>,您必须使用operator[] QList<>获取你的数据。

现在对于一些完全不相关的东西,你拼错了 indices :)