Итак, в настоящее время я пытаюсь вставить структуру в связанный список, и по какой-то причине, когда я пытаюсь добавить новую структуру или создать новый узел, у меня возникает эта ошибка при пустом нажатии, и я понятия не имею, почему. Любая помощь будет принята с благодарностью, потому что я потратил на это пару часов. Спасибо за ваше время! Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Rect Rect;
typedef struct node node_t;
typedef enum {red, green, blue, yellow, cyan, magenta, black} Color;
struct Rect{
int id, x, y, w, h, area, filled;
Color colour;
};
struct node_t{
Rect obj;
node_t *next;
};
void push(const node_t *p, node_t **head_ptr)
{
node_t *new_node = malloc(sizeof(*new_node));//the problem is here: It underlines with red the "sizeof" and says incomplete type is not allowed
if (new_node == NULL)
{
printf("ERROR!");
exit(EXIT_FAILURE);
}
new_node->rect = *p;
new_node->next = *head_ptr;
*head_ptr = new_node;
}
Внимательно посмотрите на эти строки:
typedef struct node node_t; // what is the typedef name, and what is the tag?
...
struct node_t{ // what is the tag name?
Rect obj;
node_t *next;
};
Короткий ответ: вы никогда не определяете struct node
тип для node_t
typedef. Вам нужно изменить определение структуры с struct node_t {
на struct node {
.
@Barmar: Или это, да.
Большое спасибо, я тупой, я вообще этого не видел !. Как я могу отметить это как ответ? Или удалить?
@Δημητρης Μπαμπας: Рядом с моим ответом должна быть неактивная галочка, просто нажмите на нее, чтобы отметить ее как принятую.
Или изменить typedef