我目前正在尝试创建字符串的哈希表。但是,在我的搜索功能中,我遇到了一个错误:再次请求成员_而不是结构或联合体..

 /*search hash table*/
    ListC search(hash_ref h, char* key){
        ListC* tempList;
        int hashvalue= hashing(h, key);
46      for(tempList= h->List[hashvalue]; tempList!=NULL; tempList=tempList->next){
47          if(strcmp(tempList->key,key)==0){
                return tempList;
            }
        }
        return NULL;
    }

    /*hash function*/
    int hashing(hash_ref h, char* key){
        int hashvalue=0;
        for(hashvalue=0;key!='\0';key++){
            hashvalue= *key + (hashvalue*5) - hashvalue;
        }
        return hashvalue%h->size;
    }

    /*HashTable struct*/
    typedef struct HashTable{
    int size;
    ListC **List;
    }hash;

    typedef struct Node{
        long key;/*book id*/
        long count;
        struct Node* next;
        struct Node* prev;
    }NodeType;

    typedef NodeType* NodeRef;

    typedef struct ListCount{
        NodeRef first;
        NodeRef last;
        NodeRef current;
        long length;
    }ListCount;

ListC在我的头文件中定义为
typedef struct ListCount* ListC;

在第46和47行,我收到一条错误消息,说key和next是不是结构的成员。我不确定这是什么问题

最佳答案

typedef struct ListCount* ListC;

因此ListC是指针类型。
ListC* tempList;
tempList是指向ListCount的指针。
... tempList=tempList->next ...
tempList不指向具有名为next的成员的结构。

我建议,这说明了为什么为指针类型定义typedef通常不是一个好主意。无论如何,您都必须跟踪间接级别。如果所有指针类型都是显式的,这样做通常会更容易。

09-06 19:36