Ошибка компиляции с: переключатель, “ожидаемое выражение прежде”

Сокращение к преследованию, я воссоздал свою проблему, поскольку это справедливо сам объяснительное.

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

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

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

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

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

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

78
задан Ross 10 January 2010 в 11:42
поделиться

2 ответа

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

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

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

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

160
ответ дан 24 November 2019 в 10:29
поделиться

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

21
ответ дан 24 November 2019 в 10:29
поделиться