На данный вопрос уже ответили:
Никак не могу понять, в чём ошибка в коде. Например, если я пишу вот так:
fstream f("data.txt");
switch (choosing)
{
case 1:
f >> size >> x;
break;
case 2:
break;
}
То всё работает пркрасно, но, если я напишу:
switch (choosing)
{
case 1:
fstream f("data.txt");
f >> size >> x;
break;
case 2:
break;
}
То получуошибку вида:
Ошибка C2360 пропуск инициализации "f" из-за метки "case" Train d:\c++ projects\train\train\source.cpp 71
Вопрос, что не так? Ведь по сути, я просто переношу инициализацую файловой переменной изнутри case наружу?
Дело в том что в С++ конструкция switch
/ case
является замаскированным goto
и case
блоки не создают области видимости. У вас происходит примерно вот это:
if(1 == choosing)
{
goto mark1;
}
if(2 == choosing)
{
goto mark2;
}
{
mark1:
fstream f("data.txt");
f >> size >> x;
goto ending;
mark2:
// если choosing 2, то мы попадаем сюда, пропуская инициализацию f
goto ending;
}
ending:;
Соответственно для каждого case
следует вручную создавать новую область видимости:
switch (choosing)
{
case 1:
{
fstream f("data.txt");
f >> size >> x;
}
break;
case 2:
{
}
break;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
q2 главное стартовое окноУ него есть кнопка QButton pushButton
Как сделать так, чтобы после вывода 20 рандомных чисел пиcалось есть чётные числа или нет?
Написал функцию создания матрицы и подсчета её определителя, но не могу написать функцию вывода матрицыВместо всех строк и столбцов вывод...