c++ - 获取另一个指针类成员封装的指针类成员列表的索引值

标签 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 ];

错误

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.

错误

error: expected unqualified-id before ‘(’ token

error: ‘mFaces’ was not declared in this scope

当然,显而易见的是:

*indeces =  mGeometry->mFaces[ 0 ];

错误

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] 完全相同.

这也是您收到错误 cannot convert ‘QList<short unsigned int>’ to ‘GLushort’ 的原因当你试图做的时候

( *mGeometry ).mFaces[ 0 ];

因为 ( *mGeometry ).mFaces[ 0 ]; (同样,相当于上面的 *mGeometry->mFaces )让你得到一个 QList<GLushort> , 你必须使用 operator[]QList<>获取您的数据。

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

关于c++ - 获取另一个指针类成员封装的指针类成员列表的索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947384/

相关文章:

c++ - 如何在C++中打印字符数组

user-interface - 使用 QtPropertyBrowser 作为高级配置编辑器

c++ - 是否可以在不重复代码的情况下动态翻译 Qt 应用程序?

python - 设置布局的背景颜色

c++ - 在 constexpr 表达式中检查具有公共(public)初始序列的 union 的非事件成员

c++ - 为什么 QPainter 在 QAbstractItemView::dataChanged 中不工作?

javascript - 为什么使用此 JavaScript 代码我只能看到最后加载的图像?

java - 使用数组作为 hashmap java 的键

c++ - 有什么方法可以通过 Windows 上的代码创建动态磁盘吗?

c++ - 有 4 位,如何为 AVX 寄存器生成掩码?