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

标签 c++ scope switch-statement variable-declaration

我的 C++ 代码中有一个 switch 语句,我想在该语句的 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;
}

我尝试在 case 中简单地声明、初始化和使用变量 (int someInt),但这给了我一些编译错误......遇到过这个问题关于 SO:Why can't variables be declared in a switch statement? ,我尝试按照答案的建议进行操作,并将 {} 添加到有问题的 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;
}

但我现在收到编译错误,指出:“未声明的标识符”在 xyz 案例中使用的变量 (commonData)切换

查看了这个 - 似乎这个变量是在 switchabc 案例中声明的......很明显,因为我已经添加了 {}abc,通过尝试在 abc 之外使用它,我现在尝试在其声明范围之外使用它。

那么为什么我不能像声明/使用commonData一样声明/使用someInt而不需要{ case 声明的地方?

最佳答案

{ .. } 创建一个局部作用域,因此您的变量声明在另一个作用域中将不可见。

在局部范围内为每个 case 添加声明,或者,如果您想在 switch 语句之外使用变量,请在 switch 之前声明它。

关于c++在switch语句中声明一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30105365/

相关文章:

c++ - CMake编译器未设置

c++ - 来自 openCV 的 imread 使图像变暗

c++ - 不带 RTOS 的 Semaphore.h

c++ - 无法在枚举中声明 "div"

java - 为什么在 switch 语句中不能使用对象,而可以使用枚举

当 vector 调整其容量时,C++ 会发生什么引用?

javascript - javascript中函数内部的突变

maven - Artifact 范围不可传递是什么意思?

c - 标准和决策问题

java - Java 枚举中的强制切换默认值