2010-12-09 111 views
7

我的代码有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

+0

欢迎堆栈溢出......请使用工具栏上的“代码”格式化按钮(它看起来像这样:101010" ),今后格式化你的代码 – 2010-12-09 05:54:17

+0

相关: 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

回答

10

如果你想有一个案例里面临时对象的线路的信息,你需要范围他们正确。

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; 
    } 
} 
+0

请按照范围正确指示你的意思 – lovesh 2010-12-09 05:57:23

2

尝试宣告交换机命令上面的变量:

n_hexa nx; 
n_octa no; 
n_bin nb; 
switch(choice) { 
    case 1: 
     cin>>n; 
     nx(n); 
     break; 
... 
2

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声明中自由声明。

希望帮助..

相关问题