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

问题描述 投票:0回答:3
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:警告:从不兼容的指针类型赋值[-Win兼容指针类型]

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

c struct typedef
3个回答
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;

这一切的发生都是因为你

typedef
一个匿名的
struct

另外,你在这里错过了分号

f_queue_node *node
,我不知道你是否在在这里发布它或在你的代码中错过了它,只是一个提醒。


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;

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;
© www.soinside.com 2019 - 2024. All rights reserved.