Причина в том, что лексическая область действия обоих объявлений - весь текст переключателя;все случаи разделяют эту область.
То есть с точки зрения лексической области это похоже на запись
{
int a;
int a;
}
Решение состоит в том, чтобы заключить объявления в другую ограниченную область.
switch(whatever)
{
case 1:
{
int a;
break;
}
case 2:
{
int a;
break;
}
}
(Независимо от того, поместите ли вы break
внутри или снаружи скобок, это, в основном, дело вкуса. Я предпочитаю включать весь случай.)
Это работает по той же причине, по которой этот «выключатель»Фрагмент работы:
{
{
int a;
}
{
int a;
}
}