Frage Kompilierfehler mit: switch, "erwarteter Ausdruck vorher"


Auf den Punkt gebracht habe ich mein Problem neu erstellt, da es ziemlich selbsterklärend ist.

das entspricht ohne Fehler:

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

Das kompiliert mit Fehler und es fehlt nur der NSLog ():

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

Es wirft einen Fehler bei der Kompilierung "Erwarteter Ausdruck vor 'NSString'"

Fehle ich hier etwas?


75
2018-01-10 11:25


Ursprung


Antworten:


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

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

Sehen diese SO Frage Für mehr Information.

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


155
2018-01-10 11:28



Sie können eine Variable nicht als die Variable deklarieren zuerst Aussage in einem case ohne Klammern und in vielen anderen Kontexten in C-basierten Sprachen. Sehen Deklarieren von Variablen in einer switch-Anweisung für Details.


20
2018-01-10 16:08



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:

2
2018-01-20 06:44