在c ++中,main中声明的所有变量都可以在主权中使用?我的意思是如果变量是在try循环中声明的,那么它们仍然可以在整个main中访问吗? 因为我在main中的try循环中声明了几个变量,但如果我在try循环外的main的任何其他部分使用它们,我会得到一个“未在此范围内声明”错误
我很遗憾无法发布我的实际代码,但这基本上就是我正在做的事情
int main()
{
try
{
int number = 0;
}
catch (...)
{
cout <<"Error";
}
number ++;
cout <<number;
return 0;
}
我基本上会在第13行和第14行得到一个错误,说这个范围内没有声明数字。
答案 0 :(得分:7)
number
的范围仅限于try
块。将此声明拉出到main
范围,以便在try
块之后访问变量:
int main()
{
int number = 0;
try
{
// do something...
}
catch (...)
{
cout <<"Error";
}
number ++;
cout <<number;
return 0;
}
答案 1 :(得分:6)
C ++中的局部变量具有块范围,而不是函数范围。变量number
仅位于try
块内的范围内。
为了使这项工作,你有(至少)两个选择:
在函数范围内使变量可访问(不太好):
int main() {
int number;
try {
number = <some possibly-exception-throwing call>;
} catch (...) {
cout << "Error\n";
return 0;
}
++number;
cout << number;
}
将所有变量放在try范围内(更好):
int main() {
try {
int number = <some possibly-exception-throwing call>;
++number;
cout << number;
} catch (...) {
cout << "Error\n";
}
}
我强烈赞成第二种选择,原因如下:
number
)。附录:特别是main()
,还有第三种选择:
int main() try {
...
} catch {
cout << "Error\n";
}
这包括整个程序,包括main()
之外的静态初始化程序,在try ... catch中。
答案 2 :(得分:1)
在c ++中,在main中声明的任何变量都将在整个过程中可用 主权?
没有!
每个变量的范围是定义变量的块及其嵌套块:{}
您必须将int number;
放在try{}
区块之外。
有关here的更多信息:
变量范围我们打算在a中使用的所有变量 程序必须在之前的类型说明符中声明 在代码中指向,就像我们在开头的前一个代码中所做的那样 当我们声明a,b和时,函数main的主体 结果是int类型。
变量可以是全局范围或本地范围。全局变量 是外部源代码主体中声明的变量 所有函数,而局部变量是在体内声明的变量 一个函数或一个块。
甚至可以从代码中的任何位置引用全局变量 内部函数,只要它在声明之后。
局部变量的范围仅限于所包含的块 大括号({})声明它们的位置。例如,如果它们被声明 在函数体的开头(如函数main) 它们的范围介于其声明点和结束之间 功能。在上面的例子中,这意味着如果是另一个函数 除了main之外,还存在main中声明的局部变量 无法从其他功能访问,反之亦然。
答案 3 :(得分:0)
这是正常的;每个{ ... }
块标记一个新范围,在其中声明的变量是它的本地范围。如果您希望所有number
中的main
可用,请在try
块之外声明它。