2014-04-16 115 views
0

我必須爲這個項目建立一個哈希表數據結構,我已經在其他文件中完成了它。出於某種原因,當我編譯我的程序時出現錯誤,這是關於哈希表的初始化函數(TableCreate();)。當我從主函數中刪除這部分代碼並執行時,它工作正常,但是當我嘗試向哈希表中添加某些內容時,出現段錯誤。警告:函數的隱式聲明TableCreate

我相信我的哈希表的代碼沒有什麼,因爲我的哈希表的代碼是基於這是由我們的教授

我使用GCC編譯器提供給我們的哈希表的代碼示例做這樣的錯誤。

請幫我解決這個問題。

錯誤消息

SRC/sshell.c:在功能âmainâ:
SRC/sshell.c:34:警告:的功能隱式聲明âTableCreateâ
SRC/sshell.c:34 :警告:賦值時將整數指針不進行強制轉換

sshell.c

 #include "parser.h" 
    #include "shell.h" 
    #include "hash_table.h" 
    #include "variables.h" 
    #include <stdio.h> 
    #include <string.h> 
    #include <stdlib.h> 
    #include <ctype.h> 



int main(void){ 

    char input[1000], sInput[1000]; // String to get user input 
    int count=1, len; // num=0; 





    struct Table *t; 
    t = TableCreate(); //create the table 




    int while_track; 
    FILE *ptr_file; 
    ptr_file =fopen(".simpleshell_history","a"); 
    fclose(ptr_file); 
    printf("\nWelcome to the sample shell! You may enter commands here, one\n"); 
    printf("per line. When you're finished, press Ctrl+D on a line by\n"); 
    printf("itself. I understand basic commands and arguments separated by\n"); 
    printf("spaces, redirection with <and>, up to two commands joined\n"); 
    printf("by a pipe, tilde expansion, and background commands with &.\n\n"); 

    printf("\npssh$ "); 
    while (fgets(input, sizeof(input), stdin)) { 
      strcpy(sInput, input); 
      len = strlen(input); 
      if(input[len-1] == '\n'){ 
       input[len-1] = '\0'; 
      } 
      while_track = 1; // used to keep track of loop 
      while (while_track == 1){ 
       count+=1; 
       if (strcmp(input, "history")==0){  
        while_track = History(); // print history function call 
       }else if (strcmp(input, "!!")==0){ 
         while_track = Previous(input); // execute previous function call 
       }else if (strncmp(input, "!",1)==0){ // !string and !number sort 

         if(isdigit(input[1])){    
         while_track = Number(input); 
         } else { 
         while_track = String(input); 
         } 

       }else { // if the user entry was not any of specfic comnnad then pass the command to parse to execute 
        other(input,t); 
        parse(input); 

        while_track = 0; 
       }  
      } 
      HistoryFile(sInput); // A function call to recode commands entered by the user into a file 
      printf("\npssh$ "); 
    } 
    return 0; 
} 

hash_table.c

#include "hash_table.h" 
#include <stdbool.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <ctype.h> 



void feedData(char * var, char * val, struct Table *t){ 
    //const char * key=0; 
    printf("\n In FeedData Function\n"); 
    Table_add(t, var, val); 
    printf("\nInside Feed Function -- Veriable: %s Value: %s\n",var, val); 
} 

unsigned int hash(const char *x) { 
     printf("\n In Hash\n"); 
     int i; 
     unsigned int h = 0U; 
     printf("\n In Hash - Before for loop\n"); 
     for (i=0; x[i]!='\0'; i++) 
      printf("\n In Hash - In for loop %d \n", i); 
      h = h * 65599 + (unsigned char)x[i]; 
      printf("\n In Hash - In for loop - after calculation \n"); 
     unsigned int g; 
     g = h % 1024; 
     printf("\n In Hash - In for loop - before return: %u \n",g);  
     return g; 
} 

struct Table *Table_create(void) { 
     printf("\n In Table_create\n"); 
     struct Table *t; 
     t = (struct Table*)calloc(1, sizeof(struct Table)); 
     return t; 
} 

void Table_add(struct Table *t, const char *key, char * val){ 

     printf("\n In Table_add\n"); 
     struct Node *p = (struct Node*)malloc(sizeof(struct Node)); 
     int h = hash(key); 
     printf("\n In Table_add - after hash key\n"); 
     //p->key = *key; 
     strcpy(p->key,key); 
     printf("\n In Table_add - after first key\n"); 
     strcpy(p->value,val); 
     printf("\n In Table_add - after Value\n"); 
     p->next = t->array[h]; 
     printf("\n In Table_add - after p->next\n"); 
     t->array[h] = p; 
     printf("\n In Table_add - after t->array[h] = p\n"); 
} 
/* 
int Table_search(struct Table *t, const char *key, int *value){ 
    struct Node *p; 
    int h = hash(key); //--------------------------------------------------------------------- 
    for (p = t->array[h]; p != NULL; p = p->next) 
    if (strcmp(p->key, key) == 0) { 
     *value = p->value; 
     return 1; 
    } 
    return 0; 
} 
*/ 
/* 
void Table_free(struct Table *t) { 
    struct Node *p; 
    struct Node *nextp; 
    int b; 
    for (b = 0; b < BUCKET_COUNT; b++) 
     for (p = t->array[b]; p != NULL; p = nextp) { 
      nextp = p->next; 
      free(p); 
     } 
    free(t); 
} 
*/ 

hash_table.h文件代碼

#ifndef HASH_TABLE_H 
#define HASH_TABLE_H 

struct Table *Table_create(void); 
void Table_add(struct Table *t, const char *key, char * val); 
unsigned int hash(const char *x); 
void feedData(char * var, char * val, struct Table *t); 


enum {BUCKET_COUNT = 1024}; 
struct Node { 
     char key[1000]; 
     char variable[1000]; 
     char value[1000]; 
     struct Node *next; 
}; 


struct Table { 
     struct Node *array[BUCKET_COUNT]; 
}; 


#endif 

回答

3

警告1:要調用TableCreate而你的函數名Table_create

警告2:尋找新的標識後,其次是(,編譯器假定它是一個函數,它接受可變數量的參數並返回int。

+0

Thx Mohit爲您提供幫助。 – user3539892