这个对我来说有点奇怪。
我有一个指向类成员(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
的指针索引的正确方法是什么?
答案 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 :)