Нечетная ошибка компилятора при использовании объектов Obj-C в инструкции switch - PullRequest
3 голосов
/ 01 ноября 2010

Я получаю ошибку компилятора при использовании объекта Objective C в операторе switch:

switch (myConstant)
{
    case 0:
        UIViewController *myController = [[[UIViewController alloc] init] autorelease];
        [self.navigationController pushViewController:myViewController animated:YES];
        break;
    case 1:
        // stuff
        break;
    default:
        break;
}

Состояние ошибки:

Ожидаемое выражение перед 'UIViewController'
'myViewController' необъявленный (первое использование в этой функции)

Я понимаю, что вторая ошибка является прямым результатом первой ошибки, но я не понимаю, почему я получаю ошибку "ожидаемое выражение" в первую очередь ...

Если я поставлю ; в конце строки case 0:, он скомпилируется, но мне не нужно было этого делать, нет?

Это также не удастся скомпилировать, с той же ошибкой:

switch (0)
{
    case 0:
        int a = 0;
        break;
    default:
        break;
}

Однако, если я объявлю int a; за пределами блока коммутатора, то a = 0; скомпилируется нормально.

Мне показалось, что я понимаю заявления о смене - ясно, что я не понимаю. Может кто-нибудь объяснить, пожалуйста?

1 Ответ

7 голосов
/ 01 ноября 2010

Просто добавьте {} в случае, если вы объявите новую переменную. Часть регистра оператора switch не является правильной областью для объявления переменных в C.

 case 0:
     {
        int a = 0;
        break;
    }
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...