所以代码说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;
我想知道这个错误是什么?我忘了添加ListHdr在我的List头文件中更改为ListRef ..这包含在我的哈希表模块中。
我目前正在尝试创建2个哈希表。一个有表存储2个长整数。另一个哈希表采用1个长整数和一个链表(有2个长整数)。
答案 0 :(得分:3)
hash_ref
被指定为指针至hash
,因此您必须将hashed
声明为hash_ref hashed
,而不是hash_ref *hashed
。 (后者会有效地创建指向hash
的指针。)
除此之外,您应该从声明struct
的typedef中省略hash_ref
。目前hash_ref
未声明为hash
,而是指向尚未声明的struct hash
。这只是因为编译器将其解释为struct hash
的前向声明而编译。此解释将导致尝试取消引用hash_ref
的任何代码失败,并显示“存储大小为struct hash
未知”等错误。
答案 1 :(得分:1)
这意味着你要么在一个不是结构的东西上调用.
,要么在一个不是直接指向结构或联合的指针的指针上调用->
。
hash_ref * hashed是一个指向HashTable的DOUBLE指针。单个解除引用仍然为您提供HashTable指针,该指针不是联合或结构。