我正在尝试实现带有指向以C语言存储信息的双向链接的指针的哈希表。问题是我不断从编译器中收到我不明白为什么的警告。这些警告全都是“警告:来自不兼容指针类型的赋值”
这是我的结构:
typedef struct stru_contacto_list{
char *nome;
char *email;
char *telefone;
struct stru_contacto_list *prev, *next;
}contacto_list;
typedef struct stru_contacto{
contacto_list *info;
struct stru_contact *next_hash;
}contacto_hash;
typedef struct{
contacto_hash **val;
}hash_tableC;
这里有一些代码供您更好地理解正在发生的事情:
初始化哈希表
void initContactos(hash_tableC *c){
int i;
c->val =
(contacto_hash**)malloc(sizeof(contacto_hash)*DEFAULTSIZE);
for(i = 0; i < DEFAULTSIZE; i++){
c->val[i] = NULL;
}
}
这是一些我从中获得警告的代码,此处我试图通过将“ contact_hash”添加到哈希表中,方法是将其放在与hash_table中的索引关联的链接列表的开头。
void addContact(){
int index, flag;
contacto_hash *novo =
(contacto_hash*)malloc(sizeof(contacto_hash));
contacto_list *novoL =
(contacto_list*)malloc(sizeof(contacto_list));
flag = addContactToList(novoL);
if (flag){
free(novo);
return;
}
novo->info = novoL;
novo->next_hash = NULL;
index = hashing(novoL->nome);
if (contactos->val[index] != NULL)
novo->next_hash = contactos->val[index]; /* THE WARNING*/
contactos->val[index] = novo;
}
其他一些小代码,我得到相同的“警告:来自不兼容指针类型的赋值”:
contacto_hash* find(char *nome, int indice){
/*Returns the previous contact_hash i want to find*/
contacto_hash *atual, *prev;
if (contactos->val[indice] == NULL)
return NULL;
atual = contactos->val[indice];
prev = atual;
while (atual != NULL) {
if (strcmp(atual->info->nome, nome) == 0){
return prev;
}
prev = atual;
atual = atual->next_hash; /* THE WARNING */
}
return NULL;
}
来自编译器的警告是“警告:来自不兼容指针类型的赋值”