我的代码有3个类n_hexa,n_octa,n_bin。该代码是在这里为什么我不能在switch-case块中实例化对象
switch(choice)
{
case 1: cin>>n;
n_hexa nx(n);
break;
case 2: cin>>n;
n_octa no(n);
break;
case 3: cin>>n;
n_bin nb(n);
break;
}
上编译它给“跨越n_hexa的初始化”为n_octa
我的代码有3个类n_hexa,n_octa,n_bin。该代码是在这里为什么我不能在switch-case块中实例化对象
switch(choice)
{
case 1: cin>>n;
n_hexa nx(n);
break;
case 2: cin>>n;
n_octa no(n);
break;
case 3: cin>>n;
n_bin nb(n);
break;
}
上编译它给“跨越n_hexa的初始化”为n_octa
如果你想有一个案例里面临时对象的线路的信息,你需要范围他们正确。
switch(choice)
{
case 1:
{
cin>>n;
n_hexa nx(n);
break;
}
case 2:
{
cin>>n;
n_octa no(n);
break;
}
case 3:
{
cin>>n;
n_bin nb(n);
break;
}
}
请按照范围正确指示你的意思 – lovesh 2010-12-09 05:57:23
尝试宣告交换机命令上面的变量:
n_hexa nx;
n_octa no;
n_bin nb;
switch(choice) {
case 1:
cin>>n;
nx(n);
break;
...
Ebomike的帖子有答案摆脱错误的。现在的原因是,
从标准文档6.7.3,
有可能转移到块,但不是在绕过声明与初始化的方法。 程序 从具有自动存储持续时间的本地变量不在范围内的点跳转到 范围内的点不合格除非变量具有平凡类型(3.9)并且在没有初始值设定项(8.5)。
从标准文档本身的一个例子,
void f()
{
// ...
goto lx; // ill-formed: jump into scope of a
// ...
ly:
X a = 1;
// ...
lx:
goto ly; // OK, jump implies destructor
// call for a followed by construction
// again immediately following label ly
}
在其声明中goto lx;
是形成不良的,因为它正在跃升为声明lx
,其中a
范围是可见的。
此外,
77)从开关语句的条件转移来的情况下标签被认为是在这方面的跳跃。
所以,这也适用于switch
。
如果在其中放入大括号{}
,范围仅限于大括号,并且您可以在每个case
声明中自由声明。
希望帮助..
欢迎堆栈溢出......请使用工具栏上的“代码”格式化按钮(它看起来像这样:101010" ),今后格式化你的代码 – 2010-12-09 05:54:17
相关: http://stackoverflow.com/questions/2351936/create-an-object-in-switch-case http://stackoverflow.com/questions/449736/why-cant-variables-be-declared-in-a-switch -statement http://stackoverflow.com/questions/1231198/declaring-variables-inside-a-switch-statement http://stackoverflow.com/questions/2036819/compile-error-with-switch-expected-expression-before http://stackoverflow.com/questions/1115304/can-i-declare-variables-inside-an-objective-c-switch-statement http:// stackoverflow。com/questions/4068909/odd-compiler-error-when-using-obj-c-objects-in-a-switch-statement – 2010-12-09 06:02:23