почему сие не работает? о_О
компилятор выдаёт ошибку "Case bypasses initialization of a local variable"
int sel = 0;
bool exit = false;
do
{
cin >> sel;
switch (sel)
{
case 1 : TTriangle T1;TRectangle T2; break;
case 2 : T1.show_position();T2.show_position();break;
case 3 : T1.move_it(0,0);T2.move_it(0,0); break;
case 4 : IsIntersect(&T1,&T2);break;
case 5 : exit = true; break;
default : exit = true;
}
} while (!exit);
Потому, что с точки зрения С++ вот этого делать нельзя:
case 1 : TTriangle T1;TRectangle T2; break;Смотри, что получается: ты при проходе с sel==1 инициализируешь переменные T1 и T2, а что будет при sel==2? При выходе из блока switch переменные T1 и T2 уничтожаются (для них автоматически вызывается деструктор), ибо они вышли из local scope - своей области видимости, а при следующем проходе ты "перепрыгиваешь" инициализацию, и начинаешь обращаться к методам неинициализированного экземпляра, что жестко пресекается компилятором...
ясно
спасибо