我用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__
宏并能够访问结构的成员?
答案 0 :(得分:3)
records
成员是指向记录的指针,而不是记录。因此,您声明rec_1
是指向Record的指针,而不是指向您想要的Record的指针。
此外,对于那些试图编译代码的人:
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个空格。复制并粘贴到您的问题中。