[英]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_node
的next
字段(匿名結構的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.