2012-02-23 239 views
1

我想在C中編寫一個HashTable的實現,並且我得到了「不兼容的隱式聲明函數insertnode」,「之前的聲明在這裏)的錯誤。弄清楚了什麼問題在這個代碼。不兼容的函數隱式聲明

東西是打破地方我打電話從「放」法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; 
} 

回答

2

聲明insertnodemain函數中。該宣言在main之外不可見。

你再調用insertnodeput函數中。此時,沒有可見的insertnode聲明。從C99開始,這是違反約束的。

然後定義insertnode定義put後。

的解決方案是忍受,當你打電話給他們的所有函數的聲明是可見的。

它很少有意義的申報等功能內部的功能。對於像這樣沒有遞歸的小程序,您可以對您的定義進行排序,以便在調用它時顯示所有內容。或者你可以在你的任何函數定義之前在文件的頂部放置單獨的聲明。 (在一個更大的計劃,你的聲明將是一個.h頭文件)

函數聲明是一樣的東西:

list *insertnode(list*, int); 

它使得編譯器來處理的函數調用。

定義包括限定函數做什麼塊{ /* ... */ }。它還提供了一個聲明。

+0

非常感謝... – code4fun 2012-02-23 03:54:39