2012-01-17 9 views
2

ここで達成しようとしているのは、リンクされたリストを持つ辞書です。 malloc関数を使用して、各配列ポインタ。私はforループを削除すると、それが正常に動作します。誰かがエラーが発生している理由を指摘できますか?エラーは "expected" = "、"; "、" asm "または" __attribute__ "の前に"

#include <stdbool.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <ctype.h> 

#include "dictionary.h" 

unsigned int count = 0; 
unsigned int collisions = 0; 
unsigned long index = 0; 
#define HASHTABLE_SIZE 1999099 

// Initialize struct for linked list. 

typedef struct node{ 
    char word[46]; 
    struct node *next; 
    } node; 

// Initialize an array of node pointers. 

node *hashtable[HASHTABLE_SIZE]; 


for(unsigned long i = 0; i < HASHTABLE_SIZE; i++) 
    // Error here reads expected "=",";","asm" or __attribute__ before "<" 

    { 
    hashtable[i] = (node *)malloc(sizeof(node)); 

    } 
+0

これはすべて同じファイル内のですか?それはあなたの質問で分かれているので不明です。 –

+0

'-Wall'でコンパイルしていますか?あなたは他の警告を受けていませんか? –

+0

ここで私たちに示すコードはあなたの問題を示しているとは思わない。そして、ところで、 'malloc'の戻り値をキャストしないでください。 –

答えて

6

文は関数のみ内部で許可されています。

は、forループの前に

int main(void) { 

を追加し、後

return 0; 
} 

。または、mainが別のファイルにある場合は、ループを含む他の関数を定義します。

+0

メインは別のファイルにあります。ここにメインを追加できません。 – kevin

+1

ループが 'main'かどうかに関わらず、ループは* some *関数内になければなりません。 –

+0

これは問題を解決しました。(しかし、今ではさらに多くのポップアップがありますが)どのように動作しているかわかります。再度、感謝します。 – kevin

3

for(unsigned long i = 0; ...コンストラクトは、私の推測では、あなたがC99(またはあなたのようにコードをコンパイルしていないことをC99でのみ有効ですので、コンパイラはC99に準拠していません)。

簡単な方法は、iの宣言を囲むコードブロックの先頭に移動することです。

私はあなたが編集単位全体ではなく、その部分から私たちを見せていると仮定しています。仮説が間違っていて、あなたが示したコードがすべての関数の外にある場合、@Keith Thompsonが説明しているように、それを関数に囲む必要があります。

0

ループ内で変数を宣言しているときにforループを使用する場合は、C99標準を使用する必要があります。他のコンパイラについてはわかりませんが、gccではフラグ--std=c99を渡す必要があります。

これは、あなたが持っているようなループ用にコンパイルされます:

for(unsigned long i = 0; i < HASHTABLE_SIZE; i++) 
0

それは(@DonFegoが指摘したように)あなたはC99にのみC++で、Cでfor()内の変数を宣言することができず、

node *hashtable[HASHTABLE_SIZE]; 
unsigned long i; 

for(i = 0; i < HASHTABLE_SIZE; i++) 
    // Error here reads expected "=",";","asm" or __attribute__ before "<" 

    { 
    hashtable[i] = (node *)malloc(sizeof(node)); 

    } 

をお読みください。

+0

C99で行うことができます。 aixの答えを参照してください。 –

+0

@ダンフェゴええ、そういう意味です。私はそれを編集します、ありがとう! =) – Phonon

関連する問題