2016-04-13 30 views
1

Ich habe zwei Kompilierfehler beim Versuch, meinen Code zu kompilieren, und ich kann nicht finden, was das Problem wirklich ist. Könnte jemand helfen, etwas Licht zu vergießen?"Old-style Parameter Deklarationen" Fehler

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

Code:

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

sieht so aus, als hätten Sie die '{' Klammer bei der printRecords Funktionsdefinition verlegt. – jboockmann

+0

Die Öffnung '{' sollte der Funktionsparameterliste folgen. –

+0

ah! danke Leute ... jetzt bekomme ich einen Fehler, der sagt, dass in meiner Funktion 'printRecords' 'count' als eine andere Art von sybole mit einer Notiz, die angibt, wo meine vorherige Definition ist, neu deklariert wird. aber ich habe 'void printRecord (STUREC records [], int count) 'gefolgt von einer lokalen Deklaration von' int count;' ... das sind die zwei Zeilen, auf die der Fehlercode zeigt, aber ich habe sie beide bei int, Worauf könnte sich der Fehler beziehen? – seanncurtis

Antwort

0

Sie haben

void printRecords (STUREC records[], int count) 

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

Aber ich denke, Sie wollen:

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

EDIT: Dank t o callyalater für unter Hinweis auf die Neudeklaration der Parameter in der Funktion ...

+0

Außerdem ist "i" kein Parameter in "printRecords" und die alten Funktionsparameter bedeuten, dass Sie den Typ nicht in die Funktionsparameterdeklarationen eingeben. – callyalater

+0

ah! danke Leute ... jetzt bekomme ich einen Fehler, der sagt, dass in meiner Funktion 'printRecords' 'count' als eine andere Art von sybole mit einer Notiz, die angibt, wo meine vorherige Definition ist, neu deklariert wird. aber ich habe 'void printRecord (STUREC records [], int count) 'gefolgt von einer lokalen Deklaration von' int count;' ... das sind die zwei Zeilen, auf die der Fehlercode zeigt, aber ich habe sie beide bei int, Worauf könnte sich der Fehler beziehen? – seanncurtis

+0

@ mame98 Ihr Beispiel tut nicht, was Sie denken, dass es tut. Sie deklarieren die Parameter als lokale Variablen, die die Parameter * verbergen * und sie für den Rest der Funktion unzugänglich machen. – callyalater

0

Wenn Sie old style C parameter declarations verwenden möchten, müssen Sie dies tun:

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

Aber dies ist keine gute Praxis betrachtet und kann machen Ihr Code ist schwerer zu lesen. Einige Compiler haben diese Syntax sogar nicht mehr unterstützt. Die anderen Kommentare/Antworten sagen, dass Sie deklarieren (und daher ausblenden) Ihre Funktionsparameter im Körper der Funktion, aber das ist nicht, was Sie tun möchten (sonst verlieren Sie effektiv die Parameter sein eingefahren).

Wenn Sie eine Funktion wie folgt definieren:

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

Was bedeutet num beziehen sich auf: der Parameter oder die lokale Variable?

Entweder dies tun:

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

oder dies tun:

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

Aber versuchen Sie nicht beide oder eine Mischung aus beidem zu tun.

+0

Ja, ich habe gerade meine {up haha ​​bewegt und es hat sich darum gekümmert. Ich habe jetzt einen Fehler, der besagt, dass meine Anzahl in printRecords als ein anderes Symbol neu deklariert wird ... der Fehler verweist auf die Zeilen 98 und 94. Irgendwelche Anhaltspunkte? – seanncurtis

+0

@seanncurtis Entfernen Sie die Zeilen unmittelbar nach dem '{', aber vor 'int i;'. Siehe das letzte Beispiel in meiner Antwort. – callyalater

+0

oh ich sehe, wenn Sie erklären, Count ist ein int in der() die Funktion zu starten, müssen Sie das nicht in lokalen Deklarationen deklarieren? – seanncurtis