2010-01-10 3 views
74

Auf den Punkt gebracht Ich habe mein Problem neu erstellt, da es ziemlich selbsterklärend ist.Kompilierfehler mit: switch, "expected expression before"

dies entspricht ohne Fehler:

switch (n) { 
    case 1: 
     NSLog(@""); 
     NSString *aStr; 
     break; 
    default: 
     break; 
    } 

dies mit Fehler kompiliert und es ist nur die NSLog fehlt():

switch (n) { 
    case 1: 
     NSString *aStr; 
     break; 
    default: 
     break; 
    } 

es einen Fehler bei der Kompilierung "wirft Erwartete Ausdruck vor 'NSString' "

Fehle ich hier etwas?

+0

Siehe johne

+0

Ich erinnere mich an einen Switch/Case-Anweisung mit einem ähnlichen Fehler, es verwendet, um zu verschwinden, wenn ich irgendwo innerhalb des Fallblocks einen Kommentar hinzufüge .. Magic –

Antwort

154

In normalen C müssten Sie in beiden Fällen in Klammern einschließen. Ich vermute, das Ihr Problem beheben kann:

case 1: 
{ 
    NSLog(@""); 
    NSString *aStr; 
    break; 
} 

Siehe this SO question für weitere Informationen.

Eine andere Möglichkeit, dieses Problem zu umgehen, besteht darin, eine Anweisung zwischen dem Falllabel und der ersten Deklaration zu setzen, wie Sie es in Ihrem Arbeitsbeispiel oben getan haben. Siehe die Kommentare und Quinn Taylors Antwort für weitere Informationen.

+0

Interessant. Ich habe den Bracket-Ansatz nicht versucht. – Eimantas

+0

Ja, das behebt das Problem. Ich lief nur mit Code-Füllung von xcode, die sie nicht verwendet. Vielen Dank. – Ross

+0

Ich bin schon auf dieses Problem gestoßen, ich habe es mit {} selbst gelöst, gut zu sehen, dass es die richtige Lösung war. +1 für dich Dan. –

2
case 0: { 
    Loading my nib file; 
    break; 
} 
case 1: { 
    Loading another nib file; 
    break; 
} 
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example: