为什么我的指针不是结构或联合体?

时间:2019-03-19 06:18:44

标签: 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”中: 错误:请求成员“ slh_first”使用的不是结构体或联合体

此代码有什么问题?

2 个答案:

答案 0 :(得分:5)

您正尝试使用slh_first访问operator.成员,这需要在左侧的实例packet_tags。但是,您没有将packet_tags的实例传递给SFIRST(),而是将指针传递给了packet_tags实例。因此,为了访问成员,您需要取消引用指针才能到达实例。编译器抱怨的是在指针上调用operator.

改为将SFIRST()更改为此:

#define SFIRST(head) ((head)->slh_first)

或者,不太受欢迎,但同样有效:

#define SFIRST(head) ((*(head)).slh_first)

答案 1 :(得分:1)

将您的代码更改为以下代码:

fd = open(YOURFILE,'r')
lines = readlines()