繁体   English   中英

将指针取消引用到不完整类型的链表-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;
}

和标题

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

typedef struct listStruct list;

我尝试将struct声明更改为

typedef struct listStruct list{
...
};

并收到以下错误消息:请求成员进入非结构或联合状态。 如果有人有什么好主意。

编辑

结构定义位于/位于函数的单独文件中,而不是位于函数中,此后我将定义移至头文件。

显然,您将struct声明放置在某个实现文件中,并且在该文件中放置了错误的实现文件。

标头中的typedef声明

typedef struct listStruct list;

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

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

进入标头或至少进入使用结构数据字段的同一实现文件中。 现在在哪 您必须详细描述文件结构。

看来您仅在标头中声明了typedef名称

typedef struct listStruct list;

因此模块在哪里起作用

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

被定义不知道结构的定义。

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

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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM