Предупреждение о несовместимых указателях типов с помощью typedef и struct - PullRequest
0 голосов
/ 10 октября 2018
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;^

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

У вас есть next поле f_queue_node (typedef для анонимной структуры), определенное как указатель на struct f_queue_node, но вы не определили struct f_queue_node где-либо в вашем коде.

Вам нужно присвоить этой анонимной структуре тег:

typedef struct f_queue_node {
        int pid;
        struct f_queue_node *next;
}f_queue_node;
0 голосов
/ 10 октября 2018

Вы не можете назначить узел без очереди размещения и узла.

Вы должны разместить в стеке:

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;
0 голосов
/ 10 октября 2018

Используйте это:

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, я не знаю, пропустили ли вы это при публикации здесь или в своем коде, просто напоминание.

...