C 存储大小为‘;名称’;国际标准化组织’;不知道

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

编译此.c源文件时出现此错误

/INIT\u SOURCE\u BUILD/src/names\u list.c:7: 错误:“名称”的存储大小不正确 已知的

#包括
#包括“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
a
struct
时,在声明它时不必使用
struct

List names;
而不是

struct List names;

它也不是指针,因此
names->size
应该是
names.size

该结构称为_List。typedef是列表。所以你想要

 List names;

您的行正在声明一个尚未定义的“结构列表”


关于这个问题,其他的答案是非常正确的。vs->issue

+1只是一条注释,让它更清楚:
struct List
不存在。有一个
struct\u List
和一个typedef
List
标识与
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 */