我无法弄清楚代码有什么问题。例如,如果我这样写:
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里面传到了外面?
关键是在 C++ 中
switch/构造case被屏蔽goto并且case块不创建范围。你有这样的事情发生:因此,对于 each
case,您应该手动创建一个新范围: