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

时间:2018-10-09 21:38:33

标签: c struct typedef

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:警告:来自不兼容指针类型[-Wincompatible-pointer-types]的赋值

queue-> rear-> next =节点;                      ^

3 个答案:

答案 0 :(得分:3)

使用此:

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

此外,您在semicolon上错过了f_queue_node *node,我不知道您是否在此处或在代码中发布时错过了它。

答案 1 :(得分:1)

您已经将next(匿名结构的typedef)的f_queue_node字段定义为指向struct f_queue_node的指针,但是您在任何地方都没有定义struct f_queue_node在您的代码中。

您需要给该匿名结构添加一个标签:

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

答案 2 :(得分:0)

没有分配队列和节点就不能分配节点。

您必须在堆栈上分配:

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;