C中的链接列表,没有成员错误

我正在尝试为类编写一个数据库,其中我从文件中读取了所有键值(格式化的keyNULL BYTEvalueNULL BYTE等)。 我很想使用链接列表,但我得到结构没有下一个值的错误。 请帮我!

#include  #include  #include  #include  #include  #include "sdbm.h" static FILE *db; static bool opened = false; static int err = 0, keyLen = 8; typedef struct { char *name; Key *next; } Key; static Key *head = NULL,*tail = NULL; /** * Create new database with given name. You still have * to sdbm_open() the database to access it. Return true * on success, false on failure. */ bool sdbm_create( const char *name ) { //Errors: 1) fopen failed 2) fclose failed on new db db = fopen(name, "w"); if (db == NULL) { printf("Couldn't create file %s\n",name); err = 1; return false; } if (fclose(db) == EOF) { printf("Couldn't close created file %s\n",name); err = 2; return false; } return true; } /** * Open existing database with given name. Return true on * success, false on failure. */ bool sdbm_open( const char *name ) { //Errors: 3) couldn't open database db = fopen(name,"r+"); if (db == NULL) { err = 3; printf("Couldn't open database file %s\n",name); return false; } opened = true; int c; bool inKey = true; int currKey[MAX_KEY_LENGTH]; while ((c = getc(db)) != EOF) { if (!inKey && c == '\0') { inKey = true; } else if (inKey && c == '\0') { if (tail != NULL) { tail->next = malloc(sizeof(Key)); tail = tail->next; } else { tail = malloc(sizeof(Key)); head = tail; } tail->next = NULL; tail->name = currKey; } else if (inKey) { currKey[keyLen] = c; keyLen++; } } } /** * Synchronize all changes in database (if any) to disk. * Useful if implementation caches intermediate results * in memory instead of writing them to disk directly. * Return true on success, false on failure. */ //bool sdbm_sync(); /** * Close database, synchronizing changes (if any). Return * true on success, false on failure. */ bool sdbm_close() { // Errors: 5) Couldn't close database if (fclose(db) == EOF) { err = 5; printf("Couldn't close database.\n"); return false; } return true; } /** * Return error code for last failed database operation. */ int sdbm_error() { return err; } /** * Is given key in database? */ //bool sdbm_has( const char *key ); /** * Get value associated with given key in database. * Return true on success, false on failure. * * Precondition: sdbm_has(key) */ //bool sdbm_get( const char *key, char *value ); /** * Update value associated with given key in database * to given value. Return true on success, false on * failure. * * Precondition: sdbm_has(key) */ //bool sdbm_put( const char *key, const char *value ); /** * Insert given key and value into database as a new * association. Return true on success, false on * failure. * * Precondition: !sdbm_has(key) */ //bool sdbm_insert( const char *key, const char *value ); /** * Remove given key and associated value from database. * Return true on success, false on failure. * * Precondition: sdbm_has(key) */ //bool sdbm_remove( const char *key ); 

定义应该是这样的

 typedef struct Key{ char *name; struct Key *next; // <-- Note `struct` here }Key; 

你不能只使用Key [在它之前没有明确地编写struct],因为结构尚未定义[typedefed]

当我正在挖掘我的编译器时,你可以尝试将声明更改为:

 typedef struct Key_ { char *name; struct Key_ *next; } Key; 

如果有帮助,请告诉我们? 我想你可能在声明之前使用了typedef。