2010-01-10 3 views
74

Сокращение до погони Я воссоздал свою проблему, поскольку она достаточно понятна.Ошибка компиляции с помощью: switch, «ожидаемое выражение перед»

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

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

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

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

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

Я что-то пропустил?

+0

См johne

+0

Я помню переключатель/случай заявление с подобной ошибкой, это используется, чтобы исчезнуть, когда я добавляю комментарий где-то внутри блока дела. Magic –

ответ

154

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

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

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

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

+0

Интересно. Не пытались использовать скобку. – Eimantas

+0

Да, это устраняет проблему. Я просто работал с заполнением кода xcode, который их не использует. Благодарю. – Ross

+0

Я столкнулся с этой проблемой раньше, я решил ее с помощью {} сам, приятно видеть, что это правильное решение. +1 для тебя Дэн. –

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: 
Смежные вопросы