繁体   English   中英

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

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

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

用这个:

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;

发生这种情况是因为您typedef了一个anonymous struct

另外,您在这里想念semicolon f_queue_node *node ,我不知道您是否在此处或在代码中发布时错过了semicolon ,仅是提醒。

您将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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM