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