2017-10-05 6 views
-1
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


    int main(int argc, char** argv){ 
      struct Node *hashtable[1000000]; 
      struct Node *starting=NULL; 

      if(argc!=2){ 
        return 0; 
      } 

      FILE *file = fopen(argv[1], "r"); 

      if(file==NULL){ 
        printf("error\n"); 
        return 0; 
      } 

      int j; 

      for(j=0; j<1000000;j++){ 
        hashtable[j]=NULL; 
      } 

      char user; 
      int value; 
      int k; 

      while(fscanf(file,"%c %d\n", &user, &value)==2){ 
        if(value>=0){ 
          k=(value%1000000); 
        }else{ 
          k=-(value%1000000); 
        } 

        if(user=='i'){ 
          if(hashtable[k]!=NULL){ 
            struct Node *temp=hashtable[k]; 
            hashtable[k]=insertNew(temp,value); 
          } else{ 
            hashtable[k]=insertNew(starting,value); 
          } 
        } 

をポインタになりますが使用されている多くの方法があるが、私は次のエラーを取得しています:はこのエラーを取得:割り当てはキャストなしで整数から

third.c:45:86警告:代入はポインタになりますがキャストなしの整数から[デフォルトで有効] ハッシュテーブル[k] = insertNew(temp、value); ^ third.c:88:45:警告:割り当ては、キャストのない整数からポインタを作成します。[デフォルトで有効] ハッシュテーブル[k] = insertNew(開始、値);

あなたはinsertNew()のプロトタイプを逃している

+0

'insertNew'が同じコンパイルユニットにある場合、型が誤っているためにコンパイラ**エラー**が発生します。リンカーはあまり厳密ではありません。 –

+0

@WeatherVane:これはリンカー警告ではありません。 – alk

+0

@alk私は知っています。しかし、別のコンパイル単位の関数ではエラーはありません。 –

答えて

2

...私はこれが何を意味するかを理解し、私は、なぜ私はここに、このエラーを取得していますのように混乱していますので、あなたのコンパイラは、それが戻ってプロトタイプレス機能だと仮定していますint

先頭にプロトタイプinsertNew()のヘッダーを含めるか、プロトタイプを手動でファイルの先頭に宣言する必要があります。

関連する問題