gpt4 book ai didi

c - 不兼容的隐式函数声明

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:46 24 4
gpt4 key购买 nike

我正在尝试用 C 语言编写 HashTable 的实现,但出现“函数 insertnode 的不兼容隐式声明”、“previous declaration was here”形式的错误。我无法弄清楚这段代码中可能有什么问题。

我从“put”方法调用 insertnode 方法的地方出现问题。

#include<stdlib.h>
#include<stdio.h>
typedef struct list{
int data;
struct list *next;
struct list * prev;
}list;
typedef struct hash_table{
int size;
struct list ** table;
}hash_table;
int main(){
int hash(int);
list* insertnode(list*,int);
void put(hash_table* ,int);
list* findnode(list*,int);
list* get(hash_table*,int);
hash_table* ht = (hash_table *)malloc(sizeof(hash_table));
ht->table = (list **)malloc(sizeof(list *)*10);
int a[]={12,22,33,45,56,12,23,444,44,56,23};
int i=0;
for(i=0;i<10;i++)
ht->table[i]=(list *)malloc(sizeof(list));
for(i=0;i<11;i++){
list * node=get(ht,a[i]);
if(node!=NULL)
put(ht,a[i]);
else
printf("DUPLICATE %d",node->data);
}
}
void put(hash_table* ht,int data){
int index = hash(data);
//insert at head of ht->table[index]
(ht->table)[index]=(list *) insertnode((ht->table)[index],data);
}

list* insertnode(list * head,int data){
list * newhead = (list *)malloc(sizeof(list));
newhead->data = data;
newhead->next = head;
head->prev = newhead;
newhead->prev = NULL;
return newhead;
}

int hash(int data){
return data%10;
}

list* get(hash_table* ht,int data){
int index = hash(data);
list *node=findnode((ht->table)[index],data);
return node;
}

list* findnode(list* head,int data){
while(head!=NULL){
if(head->data==data)
return head;
head = head->next;
}
return NULL;
}

最佳答案

您在 main 函数中声明 insertnode。该声明在 main 之外不可见。

然后您在put 函数中调用insertnode。此时,没有可见的 insertnode 声明。从 C99 开始,这是违反约束的。

然后在 put 的定义之后定义 insertnode

解决方案是让所有函数的声明在调用时都可见。

在其他函数中声明函数很少有意义。对于像这样没有递归的小程序,您可以只对定义进行排序,以便在调用时一切都可见。或者您可以将单独的声明放在文件的顶部,在您的任何函数定义之前。 (在较大的程序中,您的声明将位于 .h 头文件中。)

函数声明类似于:

list *insertnode(list*, int);

它使编译器可以处理对函数的调用。

定义 包括 block {/* ... */} ,它定义了函数的作用。它还提供声明。

关于c - 不兼容的隐式函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com