Не могу понять причину error: dereferencing pointer to incomplete type ‘struct LinkedList’
сейчас я изучаю язык программирования СИ и из-за некоторых нужд решил написать свою реализацию списка. Я её написал, она отлично заработала и я решил вынести её в отдельный файл "list.h" дабы код был чище.
list.c
#include "list.h"
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
struct LinkedList
{
char data[512]; // строка
struct LinkedList *next; //ссылка на следующий узел
};
typedef struct LinkedList *node;
node createNode()
{
node temp; // объявлкние узла
temp = (node)malloc(sizeof(struct LinkedList)); // выделение памяти
temp->next = NULL;// следующее значение
return temp;// возвращаем новый узел
}
node addNode(node head, char value[512])
{
node temp, p;// объявляем два узла
temp = createNode(); // делаем из первого узел
strcpy(temp->data, value); // добавляем данные
if(head == NULL){
head = temp; //если список пуст то этот элемент станет верхним
}
else{
p = head;// замена верхнего
while(p->next != NULL){
p = p->next;
}
p->next = temp;
}
return head;
}
node NodeByIndex(int index, node head)
{
node n = head;
for(size_t i = 0; i < index; i++){
n = n->next;
}
return n;
}
node DelByIndex(int index, node head)
{
if (index <= 0) return head;
if (index == 1) return head;
if (index == 2) return head->next;
NodeByIndex(index-1, head)->next = NodeByIndex(index+1, head);
//free(NodeByIndex(index, head));
return head;
}
list.h
#ifndef _LIST_H
#define _LIST_H
struct LinkedList;
typedef struct LinkedList *node;
node createNode();
node addNode(node head, char value[512]);
node NodeByIndex(int index, node head);
node DelByIndex(int index, node head);
#endif
main.c
#include "list.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
node head = createNode();
char string1[512];
char string2[512];
char string3[512];
strcpy(NodeByIndex(0, head)->data, string1);
}
При попытке скомпилировать программу я получаю следующую ошибку:
main.c: In function ‘main’:
main.c:66:30: error: dereferencing pointer to incomplete type ‘struct LinkedList’
66 | strcpy(NodeByIndex(0, head)->data, string1);
|
Я никак не могу понять что не так, заголовочный файл я делал так как учат в разных источниках. Сравнивался с разными и большинство пишут одно и тоже. Многие советуют объявить структуру, в заголовочном файле, целиком но это ничем не помогает. Людям с такой же ошибкой иногда пишут что проблема в последовательности объявления структур и функций(код ведь читается сверху вниз). Но если моя ошибка в этом я её не могу найти т.к я перепроверял код ни раз и он вроде написан верно. Так в чём всё таки тут может быть проблема? (если вдруг это может быть важно я всё компилю на wsl)