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