c++ - 为什么我的指针不是结构或 union ?

标签 c++ c

#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/

相关文章:

c++ - 你如何调用一个返回引用或抛出异常的函数而无需体操?

c - recvmsg 的 Linux SocketCAN 行为

c - 如何在 OS X 10.10.1 上正确安装 cs50.h 库?

c - 指向 char 的指针的问题

c++ - 应用程序的内存布局

c++ - 悬挂指针 - 请验证

c++ - 使用已删除的函数 'std::thread::thread(const std::thread&)'

C++ "...does not name a type"

c++ - 如何仅按字母列出?

c - 如何将整数指针传递给函数?