2017-02-22 1 views
2

Also, ich habe eine Funktion, wo ich eine Struktur deklariere, die gefüllt ist und auch eine neue Funktion deklarieren will. Wenn ich oben eine neue Funktion deklariere, funktioniert es, wenn ich es in der gleichen Zeile nach Komma (,) deklariere, funktioniert es, aber es funktioniert nicht in der unteren Zeile. Irgendwelche Erklärungen? Danke im Voraus.Warum kann ich nicht strukturieren 2. mal in Funktion?

void CFilter(float avgprofit, int lines) 
{ 
    //client goodclient[MAX_CLIENT]; THIS WOULD COMPILE 
    client client[MAX_CLIENT], goodclient[MAX_CLIENT]; // THIS COMPILES 
    //client goodclient[MAX_CLIENT]; THIS WOULDN'T COMPILE 
    int i, amount = 0; 
    float userprofit; 
    for (i = 0; i <= lines; i++) { 
     userprofit = client[i].loses - client[i].wins; 
     if (userprofit >= avgprofit) { 
      client[i].goodclient = 1; 
     } else { 
      client[i].goodclient = 0; 
     } 
    } 
} 
+0

Wenn Sie 'goodclient' in der nächsten Zeile, hast du es aus der vorherigen Zeile entfernt? Es ist unklar. Übrigens bitte vermeiden Sie den gleichen Namen für eine Variable als Typ. Bestenfalls: Verwirrung, schlimmstenfalls: Fehler. –

+0

* Warum kann ich nicht strukturieren 2. Mal in Funktion? * Weil Sie nicht können. Es ist eigentlich eine * Definition *, die nicht dupliziert werden kann. Eine duplizierte * Deklaration *, wie zB ein Funktionsprototyp oder eine externe Variable, kann jedoch - solange sie alle identisch sind - sein. –

+0

Gute Idee, Typen mit einem Großbuchstaben zu starten - kann sie dann von Variablen unterscheiden –

Antwort

5

Das Problem ist, dass der Name des Arrays client die Namen des Typs versteckt client.

client client[MAX_CLIENT]; 
client goodclient[MAX_CLIENT]; 

So in der zweiten Erklärung hält der Compiler den Namen client als der Name des Arrays.

Es ist keine gute Idee, denselben Namen für verschiedene Entitäten zu verwenden.

Die einfachste Möglichkeit, den Compiler zum Kompilieren der Deklarationen zu veranlassen, besteht darin, das Array umzubenennen.

Oder, wenn der Typ client ein typedef einen Strukturtypen mit dem gleichen Namen ist, dann können Sie zum Beispiel

client client[MAX_CLIENT]; 
struct client goodclient[MAX_CLIENT]; 

andere Art und Weise schreiben ist nur die Erklärungen auszutauschen

client goodclient[MAX_CLIENT]; 
client client[MAX_CLIENT]; 
Verwandte Themen