获取由另一个类成员封装的指针类成员列表的索引值,这是一个指针
问题描述:
这对我来说有点奇怪。获取由另一个类成员封装的指针类成员列表的索引值,这是一个指针
我有一个指向类成员(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<>
以获取您的数据。
而现在完全无关的东西,你拼错指数 :)
啊,谢谢。无可否认,我从网上找到的一个文件('render.cpp' - 也许你听说过这个文件)发现了这个问题,并且改变了一些东西以提高效率。我再次感谢它。 :) – zeboidlund