如何使用全局变量而不将其声明为全局变量
How to use a variable globally without declaring it as a global?
我有一个像这样的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:
下声明,randomVariable
是一个数组。请尽量使用std库,请不要使用矢量,因为这是一个项目,矢量在这门课上根本不会讨论。
能够访问变量的区域称为其作用域。对于局部非静态变量,这个范围的边界用花括号定义({
…}
),所以:
{
...
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风格的数组使用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风格数组,这将使你免于丑陋的内存管理。
编辑:
在你的注释之后,对于你的用例,你可能想要这样的东西:
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;
根据您的限制,它必须在case 1中初始化,那么只需将变量设置为指针并在case 1中使用variable = new something();
。
顺便说一下,这个作用域与"global"无关。
变量的作用域只在它被定义的块内,所以不可能在一个作用域内定义变量,即在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
}
}
}
开关上面的作用域可以是一个函数,也可以是另一个块,这取决于你的代码。
给你…
- 创建一个新类(例如superClass)。
- 创建一个名为randomVariable的属性字段存根,带有getter &setter方法。
- 将该属性设置为静态。(这样它的值可以被全局使用,即使有不同的对象差异)。
- 在你放置switch语句的类中继承这个类
- 现在你可以初始化&在任何你想要的地方使用随机变量,设置它的新值或旧值。
希望这将帮助…!!
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 将静态全局变量声明为内联有什么意义吗?
- 我真的可以使用 Type 的每个声明创建一个全局变量吗?
- 声明为类字段而不是全局变量
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 在结构声明的分号之前声明的结构变量是否为全局变量
- 困惑,为什么没有在此范围内声明 c++ 全局变量
- 使用静态和避免单例模式声明全局变量
- 声明全局变量 <vector>,代码将无法成功运行
- 即使在定义类后也无法在C++中声明全局变量?
- 查找声明全局变量的文件
- 初学者程序员 c++(局部与全局变量声明)
- 我应该如何在我的C++项目中声明全局变量
- 关于全局变量的外部声明"C"外部声明
- 使用预处理器技巧定义和声明全局变量
- 将变量声明为全局变量会给出不同的答案
- 默认情况下全局变量是 extern 还是等效于在全局中使用 extern 声明变量
- C++ 全局变量声明
- 使用外部的全局变量声明
- Javadoc:对于多个全局变量声明,只需一个注释