2010-12-09 209 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聲明中自由聲明。

希望幫助..

相關問題