c ++在switch语句中声明变量

Nob*_*fer 3 c++ scope switch-statement variable-declaration

switch在我的C++代码中有一个语句,并且想在该语句中声明并使用一个变量case.该变量仅在该特定范围内使用case.

switch(mode)
{
case abc:
    ...
    struct commonData;
    commonData = manager->getDataByIndex(this->Data.particularData);
    int someInt = 1;
    ...
    break;
case xyz:
    ...
    commonData = Manager->getDataByIndex(this->Data.particularData);
    break;
default:
    ...
    break;
}
Run Code Online (Sandbox Code Playgroud)

我试过简单地声明,初始化和使用变量(int someInt)就在里面case,但这给了我一些编译错误......在SO上遇到这个问题:为什么变量不能在switch语句中声明?,我尝试做了答案的建议,并添加{}case问题中,所以我switch现在看起来像这样:

switch(mode)
{
case abc:
    {
    ...
    struct commonData;
    commonData = manager->getDataByIndex(this->Data.particularData);
    int someInt = 1;
    ...
    break;
    }
case xyz:
    ...
    commonData = manager->getDataByIndex(this->Data.particularData);
    break;
default:
    ...
    break;
}
Run Code Online (Sandbox Code Playgroud)

但我现在收到编译错误,说明:在一个变量(commonData)的"未声明的标识符",在该xyz情况下使用switch.

看看这个 - 似乎这个变量是abcswitch... 的情况下声明的那么显然,因为我已经添加了{}to abc,通过尝试在外面使用它abc,我现在正试图在范围之外使用它它的声明.

那么为什么我不能以声明/使用someInt的方式commonData声明/使用它而不需要声明它的{}内部case

Kar*_*ath 8

{ .. } 创建一个本地范围,因此您的变量声明在另一个范围内不可见.

向每个case具有本地范围的声明添加声明,或者,如果要在switch语句之外使用该变量,请在声明之前声明它switch.

  • 事实并非如此.您可以在交换机中创建本地范围,并仅将变量添加(和*use*)到该范围.但这不是你在你的例子中所做的. (2认同)