Создание нового объекта в блоке переключателей - почему он выходит из строя? - PullRequest
4 голосов
/ 14 декабря 2008

Почему

switch ([document currentTool]) {
    case DrawLine:
        NSBezierPath * testPath = [[NSBezierPath alloc]init];
        //...rest of code that uses testPath....

результат в

error:syntax error before "*" token

для testPath?

1 Ответ

10 голосов
/ 14 декабря 2008

Вы не можете создать экземпляр объекта внутри оператора case, если не поместите его в новую область видимости. Это потому, что в противном случае вы могли бы сделать что-то вроде этого:

switch( ... ) {
    case A:
       MyClass obj( constructor stuff );
       // more stuff
       // fall through to next case
    case B:
       // what is the value of obj here? The constructor was never called
    ...
}

Если вы хотите, чтобы объект сохранялся в течение всего дела, вы можете сделать это:

switch( ... ) {
    case A: {
       MyClass obj( constructor stuff );
       // more stuff
       // fall through to next case
    }
    case B:
       // obj does not exist here
    ...
}

То же самое в Objective C, а также C и C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...