取消引用指向不完整类型链表的指针 - C

Dereferencing Pointer to incomplete type Linked List - C

我已经尝试解决这个问题一段时间了,但找不到解决方案。我正在构建一个链接列表,当我尝试将该列表作为指向任何内容的指针传递时,我收到错误消息:取消引用指向不完整类型的指针。

这是我的结构声明

typedef struct listStruct{
 char *name;
 int size;
 boolean inRestStatus;
 list *next;
 }list;

以及许多不起作用的功能之一。

void addToList(list *l, char * name, int size){
list *tmp;
while(l->next != NULL){
        l = l->next;
        }
tmp = malloc(sizeof(list));
tmp->name = name;
tmp->size = size;
tmp->inRestStatus = NO;
tmp->next = NULL;
l->next = tmp;
}

和header

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct listStruct list;

我尝试将结构声明更改为

typedef struct listStruct list{
...
};

并收到错误:请求成员不是结构或联合。 如果有人有任何想法那就太好了。

编辑

主函数中的结构定义 is/was 与函数不同,我已将定义移至 header 文件。

显然,您将结构声明放入某个实现文件中,并且错误的实现文件。

您在 header

中的 typedef 声明
typedef struct listStruct list;

声明了一个不完整的类型。你必须把这个

typedef struct listStruct{
  char *name;
  int size;
  boolean inRestStatus;
  list *next;
} list;

到 header 或至少到使用你的结构的数据字段的同一个实现文件。它现在在哪里?您必须详细描述您的文件结构。

您似乎只在 header

中声明了 typedef 名称
typedef struct listStruct list;

因此函数所在的模块

void addToList(list *l, char * name, int size);

is defined 不知道结构的定义。

您必须在 header 中包含结构定义,例如

typedef struct listStruct{
 char *name;
 int size;
 boolean inRestStatus;
 struct listStruct *next;
 }list;

它可以在定义函数的模块中访问。

考虑到这个方法

void addToList(list *l, char * name, int size){
list *tmp;
while(l->next != NULL){
        l = l->next;
        }
tmp = malloc(sizeof(list));
tmp->name = name;
tmp->size = size;
tmp->inRestStatus = NO;
tmp->next = NULL;
l->next = tmp;
}

也是错误的。例如 l 可以等于 NULL 不是吗?

也是简单的复制指针

tmp->name = name;

看起来很可疑。您是否应该分配内存来存储参数名称指向的字符串的副本?