Ошибка компиляции с: switch, «ожидаемое выражение перед» - PullRequest
77 голосов
/ 10 января 2010

В погоне за мной я воссоздал свою проблему, поскольку она довольно очевидна.

это соответствует без ошибок:

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

это компилируется с ошибкой , и только отсутствует NSLog ():

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

выдает ошибку при компиляции " Ожидаемое выражение перед 'NSString' "

Я что-то здесь упускаю?

Ответы [ 3 ]

158 голосов
/ 10 января 2010

В обычном C вы должны заключить это в квадратные скобки в обоих случаях. Я подозреваю, что это может решить вашу проблему:

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

См. этот вопрос SO для получения дополнительной информации.

Другой способ обойти эту проблему - поместить оператор между меткой case и первым объявлением, как вы делали в своем рабочем примере выше. См. Комментарии и ответ Куинн Тейлор для получения дополнительной информации.

20 голосов
/ 10 января 2010

Нельзя объявить переменную как оператор first в case без скобок и во многих других контекстах в языках на основе C. См. Объявление переменных внутри оператора switch для получения подробной информации.

2 голосов
/ 20 января 2011
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:
...