0

我用 g++ 编译,我的代码中有一些数据结构:

typedef struct {
  int member;
  // [...]
} Record;

class Data {
  Record * records;
  // [...]
  static int method(const void * ptr);
};

然后第一个版本有效:

int Data::method(const void * ptr) {
    Record * rec_1 = (Record *) ptr;
    return rec_1->member;
}

第二个版本没有:

int Data::method(const void * ptr) {
    __typeof__(records) * rec_1 = (__typeof__(records) *) ptr;
    return rec_1->member;
}

并引发错误:

error: request for member ‘member’ in ‘* rec_1’, which is of non-class type ‘Record*’

我是__typeof__宏,因为它让我不用担心它们是什么类型records。是否可以保留__typeof__宏并能够访问结构的成员?

4

2 回答 2

3

records成员是指向记录的指针,而不是记录。因此,您声明rec_1是指向记录指针的指针,而不是指向您想要的记录的指针。

此外,对于那些试图编译代码的人:

  • 您将“typedef”拼错为“typdef”。
  • Record->member你在你想写的地方写rec_1->member
  • method不允许静态成员函数引用成员records。删除static允许它编译。
于 2012-10-02T13:42:57.810 回答
2

records有类型Record*rec_1类型也是如此Record**

假设在您的实际代码中该行是rec_1->member,而不是Record->member,那么您正在尝试访问对象的成员*rec_1。但是*rec_1有 type Record*,它没有成员。

如果您发布您的实际代码,则有可能有人可以回答您的问题,而无需猜测它的真正含义。尽可能编写最短的程序,它会产生您报告的编译器错误。将代码缩进 4 个空格。将其复制并粘贴到您的问题中。

于 2012-10-02T13:42:21.787 回答