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

Почему

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

результат в

error:syntax error before "*" token

для testPath?

14.12.2008 02:06:47
1 ОТВЕТ
РЕШЕНИЕ

Вы не можете создать экземпляр объекта внутри оператора 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 ++.

10
14.12.2008 02:46:32