使用 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 = node;
^
使用这个:
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
,我不知道你是在这里发布还是在你的代码中错过了它,只是提醒一下。
您将 f_queue_node
的 next
字段(匿名结构的类型定义)定义为指向 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;
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 = node; ^
使用这个:
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
,我不知道你是在这里发布还是在你的代码中错过了它,只是提醒一下。
您将 f_queue_node
的 next
字段(匿名结构的类型定义)定义为指向 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;