1

我有这样的 switch 语句

switch(option)
{
case 1:
{
    int randomVariable;
}
case 2:
{

}
case 3:
{
\\ I want to use randomVariable here but it is not letting me since it is not in the same scope
}

}
}

关于如何解决这个问题的任何想法?请注意,randomVariable必须在case 1:and下声明它randomVariable是一个数组。请尽量坚持使用标准库,请不要使用向量,因为这是一个项目,并且在本课程中根本没有讨论向量。

4

5 回答 5

3

您能够访问变量的区域称为其作用域。对于局部非静态变量,此范围的边界用大括号 ( {... }) 定义,因此:

{
    ...
    int a = 0;
    switch (option)
    {
        case 1:
        {
            int b;
            a = 2;
        } // <-- the scope of b ends here
        ...
    }
} // <-- the scope of a ends here

请注意,randomVariable必须在其中声明,case 1:因为这是创建数组的选项

由于您使用 C++ 编程,而不是 C 样式的数组 use std::vector,它是在连续内存块中保存元素的容器,就像数组一样,但它的大小可以改变:

#include <vector>
...
{
    std::vector<int> myVector;
    switch (option)
    {
        case 1:
        {
            int size;
            // value retrieved in run-time is assigned into size here
            myVector.resize(size, 0);
        }
        case 2:
        {
            // you can use your vector here:
            if (myVector.size() > 3)
                myVector[2] = 7;
        }
        ...
    }
} // <-- end of myVector's scope

在此示例中,myVector.resize(size, 0);调整 vector 内部使用的内存大小,使其足以容纳size元素,如果其大小已增加,它还会将新元素插入此内存并将它们初始化为0. 这里重要的是,这myVector是一个具有自动存储持续时间的对象,这意味着当执行超出其定义的范围时,内存会被自动清理。这使您免于在使用动态分配的 C 样式数组的情况下必须处理的丑陋的内存管理。

于 2013-03-10T09:43:26.030 回答
1

根据您的限制,它必须在案例 1 中初始化,然后只需将变量设为指针并variable = new something();在案例 1 中使用。

顺便说一句,这个范围与“全局”无关。

于 2013-03-10T09:39:15.087 回答
1

编辑

在您发表评论之后,对于您的用例,您可能想要这样的东西:

int * myArr = 0;
int myArrSize = 10;

switch (option) {
  case 1:
    if (myArr != 0) {
      // Clean up memory if we are re-initializing
      delete [] myArr;
    }
    myArr = new int[myArrSize];
    break;
  case 2:
    break;
  case 3:
    int test = myArr[1];
    break;
}

// Clean up memory when we are done with the array
delete [] myArr;
于 2013-03-10T09:39:18.540 回答
0

变量的范围仅在它定义的块内,因此不可能在一个范围内定义变量,即在范围内case 1:并在范围外访问它,除非您打算在没有显式块的情况下将 1 和 3 的情况组合在一起{ ... }.

在整个 switch 语句中可见的范围内定义randomVariable,以便任何情况下都可以访问此变量。

{
    int randomVariable;
    switch(option)
    {
        case 1:
            {

            }
        case 2:
            {

            }
        case 3:
            {
                \\ I want to use randomVariable here but it is not letting me since it is not in the same scope
            }

    }
}

开关上方的范围可以是一个函数,也可以是另一个块,具体取决于您的代码。

于 2013-03-10T09:35:12.143 回答
0

干得好...

  • 创建一个新类(例如,superClass)。
  • 使用 getter 和 setter 方法创建一个名为 randomVariable 的属性字段存根。
  • 将该属性设为静态。(这样它的值就可以在全球范围内使用,即使对象不同)。
  • 在放置 switch 语句的类中继承此类。
  • 现在,您可以通过设置新值或旧值来初始化和使用随机变量。

希望这会有所帮助..!!!

于 2013-03-10T09:49:08.587 回答