“名称”的存储大小未知

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

/INIT_SOURCE_BUILD/src/names_list.c:7:错误:“名称”的存储大小未知

#include  #include "list.h" int main(){ struct List names; names->size = 3; struct ListElmt michael; struct ListElmt john; struct ListElmt adams; names->head = michael; michael->data = 12; michael->next = john; john->data = 14; john->next = adams; adams->data = 16; struct ListElmt pointer = List->head; for(int x = 0; x data); pointer->next = pointer->next->next; } } 

这是这个链表的标题

 #ifndef LIST_H #define LIST_H #include  /* 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 

当你输入这样的struct时,你在声明它时不必使用struct

 List names; 

代替

 struct List names; 

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

struct List names; 不声明指针,但你试图取消引用它(使用-> )。 请改用names.size

该结构称为_List。 typedef是List。 所以你要

  List names; 

要么

 struct _List names; /* probably not, the _ is convention for internal names */ 

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

其他答案非常正确。 vs – >问题