it-swarm.com.ru

Ошибка компиляции с: switch, «ожидаемое выражение перед»

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

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

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

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

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

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

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

77
Ross

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

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

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

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

158
Dan Olson

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

20
Quinn Taylor
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
kiran kumar