Не могу понять причину 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)


Ответы (0 шт):