如果在声明中使用了__typeof__宏,是否可以访问struct成员?

时间:2012-10-02 13:34:35

标签: c++ g++

我用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__宏并能够访问结构的成员?

2 个答案:

答案 0 :(得分:3)

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

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

  • 你拼错了“typedef”为“typdef”。
  • 您在Record->member。{/ li>编写了rec_1->member
  • 不允许静态成员函数method引用成员records。删除static允许它编译。<​​/ li>

答案 1 :(得分:2)

records的类型为Record*。因此rec_1的类型为Record**

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

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