1

所以代码是说 List 和 size 不是一个结构?

typedef struct HashTable{
    int size;
    ListRef **List; 
} hash;

typedef struct hash *hash_ref;

hash_ref *newHash(int size){
    hash_ref *hashed= NULL;
    if(size<1){
        return NULL;
    }
    if( (hashed=malloc(sizeof(hash))) ==NULL){
        return NULL;
    }
    if( (hashed->List=malloc(sizeof(ListRef*)*size)) ==NULL){
        return NULL;
    }
    for(int i=0; i<size; i++){
        hashed->List[i]=NULL;
    }
    hashed->size=size;

    return hashed;
}

这是我的列表功能

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

typedef NodeType* NodeRef;

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

我想知道这个错误是怎么回事?我忘了在我的 List 头文件中添加 ListHdr 已更改为 ListRef 。它包含在我的哈希表模块中。

我目前正在尝试创建 2 个哈希表。一个有表存储 2 个长整数。另一个哈希表需要 1 个长整数和一个链表(有 2 个长整数)。

4

2 回答 2

3

hash_ref类型定义为指向 的指针hash因此您必须声明hashedhash_ref hashed,而不是hash_ref *hashed。(后者将有效地创建一个指向指针的指针hash。)

除此之外,您应该struct从声明的 typedef 中省略hash_ref. 目前hash_ref没有声明指向hash,而是指向尚未声明的struct hash. 编译只是因为编译器将其解释为 a 的前向声明struct hash。这种解释将导致任何尝试取消引用hash_ref的代码失败,并出现诸如“存储大小struct hash未知”之类的错误。

于 2013-05-19T07:36:19.530 回答
1

这意味着您要么调用.不是结构或联合的东西,要么调用->不是直接指向结构或联合的指针的指针。

hash_ref * hashed 是一个指向 HashTable 的 DOUBLE 指针。单个取消引用仍会为您提供一个 HashTable 指针,它不是联合或结构。

于 2013-05-19T07:33:07.140 回答