C 存储大小为‘;名称’;国际标准化组织’;不知道
编译此.c源文件时出现此错误 /INIT\u SOURCE\u BUILD/src/names\u list.c:7: 错误:“名称”的存储大小不正确 已知的C 存储大小为‘;名称’;国际标准化组织’;不知道,c,struct,typedef,forward-declaration,C,Struct,Typedef,Forward Declaration,编译此.c源文件时出现此错误 /INIT\u SOURCE\u BUILD/src/names\u list.c:7: 错误:“名称”的存储大小不正确 已知的 #包括 #包括“list.h” int main(){ 结构列表名称; 名称->大小=3; 结构李斯特迈克尔; 李斯特·约翰; 结构李斯特亚当斯; 姓名->头部=迈克尔; 迈克尔->数据=12; 迈克尔->下一个=约翰; 约翰->数据=14; 约翰->下一个=亚当斯; adams->data=16; struct ListElmt poi
#包括
#包括“list.h”
int main(){
结构列表名称;
名称->大小=3;
结构李斯特迈克尔;
李斯特·约翰;
结构李斯特亚当斯;
姓名->头部=迈克尔;
迈克尔->数据=12;
迈克尔->下一个=约翰;
约翰->数据=14;
约翰->下一个=亚当斯;
adams->data=16;
struct ListElmt pointer=List->head;
对于(int x=0;x<3;x++){
printf(“迭代。%d个数据:%d”,x,指针->数据);
指针->下一步=指针->下一步->下一步;
}
}
这是这个链表的标题
#ifndef LIST_H
#define LIST_H
#include <stdio.h>
/* Define linked list elements*/
typedef struct _ListElmt{
void *data;
struct _ListElmt *next;
} ListElmt;
/* Define a structure for the list*/
typedef struct _List{
int size;
int (*match)(const void *key1, const void *key2);
void (*destroy)(void *data);
ListElmt *head;
ListElmt *tail;
} List;
void list_init(List *list, void (*destroy)(void *data));
void list_destroy(List *list);
int list_ins_next(List *list, ListElmt *element, const void *data);
int list_rem_next(List *list, ListElmt *element, void **data);
int list_size(const List *list);
ListElmt *list_head(const List *list);
ListElmt *list_tail(const List *list);
int list_is_head(const ListElmt *element);
int list_is_tail(const ListElmt *element);
void *list_data(const ListElmt *element);
ListElmt *list_next(const ListElmt *element);
#endif
\ifndef列表
#定义列表
#包括
/*定义链表元素*/
类型定义结构列表{
作废*数据;
结构_ListElmt*next;
}李斯特;
/*定义列表的结构*/
类型定义结构列表{
整数大小;
int(*匹配)(常量无效*键1,常量无效*键2);
作废(*销毁)(作废*数据);
李斯特头;
李斯特尾巴;
}名单;
无效列表_init(列表*列表,无效(*销毁)(无效*数据));
作废清单(清单*清单);
int list_ins_next(列表*列表,列表*元素,常量无效*数据);
int list_rem_next(list*list,ListElmt*元素,void**数据);
整数列表大小(常数列表*列表);
列表*列表头(常数列表*列表);
列表*列表\尾部(常数列表*列表);
int list是头(const ListElmt*元素);
int list是尾部(const ListElmt*元素);
void*列表数据(const ListElmt*元素);
ListElmt*list_next(常量ListElmt*元素);
#恩迪夫
结构列表名称代码>不声明指针,但您正在尝试取消引用它(使用->
)。使用names.size
。当您像这样typedef
astruct
时,在声明它时不必使用struct
:
List names;
而不是
struct List names;
它也不是指针,因此names->size
应该是names.size
该结构称为_List。typedef是列表。所以你想要
List names;
或
您的行正在声明一个尚未定义的“结构列表”
关于这个问题,其他的答案是非常正确的。vs->issue+1只是一条注释,让它更清楚:struct List
不存在。有一个struct\u List
和一个typedefList
标识与struct\u List
相同的类型。(我讨厌typedefs!)我有另一个错误名称\u list.c:14:error:invalid type参数'->'(have'list')@Sam:pointers使用->
快捷方式访问成员,纯结构使用
访问成员。另一点:以下划线和大写字母开头的标识符(例如\u list)保留供实现(7.1.3)使用,不应在应用程序代码中使用。
List names;
struct _List names; /* probably not, the _ is convention for internal names */