取消引用指向不完整类型链表的指针 - 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;
看起来很可疑。您是否应该分配内存来存储参数名称指向的字符串的副本?
我已经尝试解决这个问题一段时间了,但找不到解决方案。我正在构建一个链接列表,当我尝试将该列表作为指向任何内容的指针传递时,我收到错误消息:取消引用指向不完整类型的指针。
这是我的结构声明
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;
看起来很可疑。您是否应该分配内存来存储参数名称指向的字符串的副本?