C语言 与 typedef 和 struct 的指针类型不兼容警告


typedef struct {
int pid;
struct f_queue_node *next;
}f_queue_node;

typedef struct {
f_queue_node *front, *rear;
}f_queue;
f_queue *queue;
f_queue_node *node 
queue->rear->next = node;

每当我在前后使用f_queue_node指针时,我都会收到警告。

queue_f.c:39:21:警告:从不兼容的指针类型 [-Win兼容指针类型] 进行赋值

队列>后>下一个 = 节点; ^

使用这个:

typedef struct f_queue_node {
int pid;
struct f_queue_node *next;
} f_queue_node;

而不是:

typedef struct {
int pid;
struct f_queue_node *next;
} f_queue_node;

这是因为你typedefanonymous struct

。另外,你在这里错过了semicolonf_queue_node *node,我不知道你在这里或代码中发布时是否错过了它,只是一个提醒。

您将f_queue_nodenext字段(匿名结构的 typedef(定义为指向struct f_queue_node的指针,但您没有在代码中的任何位置定义struct f_queue_node

您需要为该匿名结构提供一个标记:

typedef struct f_queue_node {
int pid;
struct f_queue_node *next;
}f_queue_node;

如果没有分配队列和节点,则无法分配节点。

你必须在堆栈上分配:

f_queue queue;
f_queue_node node 
queue.rear->next = &node;

或与 malloc 一起堆:

f_queue *queue = malloc(sizeof(f_queue));
f_queue_node *node = malloc(sizeof(f_queue_node));
queue->rear->next = node;

最新更新