2016-04-13 37 views
1

コードをコンパイルしようとすると2つのコンパイルエラーが発生しています。誰かが光を放つのを助けることができますか?"Old-style parameter declarations"エラー

error: old-style parameter declarations in prototyped function definition 
error: 'i' undeclared (first use in this function) 

コード:

void printRecords (STUREC records[], int count) 

STUREC records[ARRAY_MAX]; 
int count; 
int i; 
{ 
    printf("+---------------------------+--------+--------+--------+--------+--------+--------+---------+-------+\n"); 
    printf("| Student Name | ID | Test 1 | Test 2 | Proj 1 | Proj 2 | Proj 3 | Average | Grade |\n"); 
    printf("+---------------------------+--------+--------+--------+--------+--------+--------+---------+-------+\n"); 

    for (i = 0; i < count; i++) 
    { 
     size_t j; 
     printf ("|%s|%d|%d|%d|%d|%d|%d|%f|%c|", records[i].name, records[i].id, records[i].score1, 
       records[i].score2, records[i].score3, records[i].score4, records[i].score5, 
        records[i].ave, records[i].grade); 
    } 

    return; 
} 
+2

は、printRecords関数の定義で '{'括弧が間違っているようです。 – jboockmann

+0

'{'は関数のパラメータリストの後にある必要があります。 –

+0

ああ!皆さん、ありがとうございました...私の関数では、printRecordsの 'count'が別の種類のsyboleとして再宣言され、以前の定義がどこにあるのかを記述しているというエラーが出ます。しかし、 'void printRecord(STUREC records []、int count)'の後に 'int count;'のローカル宣言が続きます...これらはエラーコードが指す2行ですが、エラーが何を参照しているのでしょうか? – seanncurtis

答えて

0

あなたは

void printRecords (STUREC records[], int count) 

STUREC records[ARRAY_MAX]; 
int count; 
int i; 
{ 

持っているしかし、私はあなたがしたいと思います:

void printRecords (STUREC records[], int count) 
{ 
    int i; 

EDIT: おかげトンをO機能のパラメータの再宣言に注意ためcallyalater ...

+0

また、 'i'は' printRecords'のパラメータではなく、古いスタイルの関数パラメータは、その型を関数のパラメータ宣言に入れないことを意味します。 – callyalater

+0

ああ!皆さん、ありがとうございました...私の関数では、printRecordsの 'count'が別の種類のsyboleとして再宣言され、以前の定義がどこにあるのかを記述しているというエラーが出ます。しかし、 'void printRecord(STUREC records []、int count)'の後に 'int count;'のローカル宣言が続きます...これらはエラーコードが指す2行ですが、エラーが何を参照しているのでしょうか? – seanncurtis

+0

@ mame98あなたの例は、あなたが思う通りのことをしません。パラメータを隠す*ローカル変数としてパラメータを再宣言し、残りの関数ではそれらをアクセス不可能にします。 – callyalater

0

あなたがold style C parameter declarationsを使用したい場合は、あなたがこれを実行する必要があります。

void printRecords(records, count) 
    STUREC records[ARRAY_MAX]; 
    int count; 
{ 
    int i; 
    // ... rest of the code ... 
} 

しかし、これは良い習慣とは見なされないと行うことができますあなたのコードは読みにくいです。コンパイラの中には、この構文のサポートを停止しているものもあります。

は、関数本体の関数パラメータをに再宣言(したがって非表示)していますが、これはあなたがしたいことではありません。渡された)。

あなたはこのような機能を定義する場合:パラメータまたはローカル変数:

void fxn(int num) { 
    int num; 
    num = num; 
} 

numはに何を指すのでしょうか?

void printRecords(records, count) 
    STUREC records[ARRAY_MAX]; 
    int count; 
{ 
    int i; 
    // ... rest of the code ... 
} 

するか、次の操作を行います:

のどちらかがこれを行う

void printRecords(STUREC records[], int count) 
{ 
    int i; 
    // ... rest of the code ... 
} 

をしかし、両方または両者の混合物をしようとしません。

+0

ええ、私はちょうど私の{上のhahaを移動し、それを世話しました。今、printRecordsの私のカウントが別のシンボルとして再宣言されているというエラーが出ています...エラーは98行目と94行目を指しています。 – seanncurtis

+0

@seanncurtis '{'の直前で 'int i;'の直前の行を取り除きます。私の答えの最後の例を参照してください。 – callyalater

+0

ああ、あなたがcountを宣言すると、関数を開始するint型の宣言であれば、ローカル宣言でそれを宣言する必要はありませんか? – seanncurtis

関連する問題