簡體   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