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

与typedef和struct不兼容的指针类型警告,c,struct,typedef,C,Struct,Typedef,每当我使用前面和后面的f_queue_节点指针时,就会收到警告 队列f.c:39:21:警告:来自不兼容指针类型的分配[-Wincompatible指针类型] 队列->后方->下一步=节点; ^使用以下方法: typedef struct { int pid; struct f_queue_node *next; }f_queue_node; typedef struct { f_queue_node *front, *rear; }f_que

每当我使用前面和后面的f_queue_节点指针时,就会收到警告

队列f.c:39:21:警告:来自不兼容指针类型的分配[-Wincompatible指针类型]

队列->后方->下一步=节点; ^

使用以下方法:

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;
而不是:

typedef struct f_queue_node {
        int pid;
        struct f_queue_node *next;
} f_queue_node;
这是因为您键入了一个匿名结构

另外,如果您在这里漏掉了分号f_queue_node*node,我不知道您在这里发布或在代码中发布时是否漏掉了分号,只是提醒一下

您将匿名结构的f_queue_node的下一个字段a typedef定义为指向结构f_queue_node的指针,但在代码中的任何地方都没有定义结构f_queue_node

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

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

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

您必须在堆栈上分配:

typedef struct f_queue_node {
        int pid;
        struct f_queue_node *next;
}f_queue_node;
或者在具有malloc的堆上:

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

哇!这是一件简单的事情,我为此伤了一段时间的脑筋。非常感谢。不幸的是,我只能接受一个答案。我已经接受了第一个。
f_queue *queue = malloc(sizeof(f_queue));
f_queue_node *node = malloc(sizeof(f_queue_node));
queue->rear->next = node;