#include <stdio.h>
struct m_tag {
short m_tag_id;
short m_tag_len;
int m_tag_cookie;
};
struct packet_tags {
struct m_tag *slh_first;
}tags;
#define SFIRST(head) ((head).slh_first)
int main(void) {
printf("%p\n", SFIRST(&tags));
return 0;
}
在函数“main”中: 错误:请求非结构或 union 中的成员“slh_first”
这段代码有什么问题?
最佳答案
您正在尝试使用 operator.
访问 slh_first
成员,这需要 packet_tags
的实例左边。但是您没有将 packet_tags
的实例传递给 SFIRST()
,而是将 指针 传递给 packet_tags
实例。因此,为了访问该成员,您需要取消引用指针才能到达实例。在指针上调用 operator.
是编译器提示的问题。
将 SFIRST()
更改为:
#define SFIRST(head) ((head)->slh_first)
或者,不太受欢迎但同样有效:
#define SFIRST(head) ((*(head)).slh_first)
关于c++ - 为什么我的指针不是结构或 union ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55234751/