error: crosses initialization of

转载 http://hi.baidu.com/hins_pan/item/61ff3d8b2e072e52e63d1950
感谢原作者 O(∩_∩)O~ 写代码时遇到同样问题,我的代码就不贴了 类似
代码:
int main()
{
int a =0;
switch(a)
{
case 0: int b = 0;break;
case 1: break;
default:break;
}
return 0;
}

编译器提示错误:
testswitch.cpp: In function ‘int main()’:
testswitch.cpp:9: error: jump to case label
testswitch.cpp:8: error: crosses initialization of ‘int b’
testswitch.cpp:10: error: jump to case label
testswitch.cpp:8: error: crosses initialization of ‘int b’

出现这样的提示,你很有可能在某个case标记中定义了局部变量,而后面还有其他的case标记或者default语句。。比如说这里的整形变量b。

看看编译器提示的信息 cross initialization of int b, 什么意思呢, 就是说跳过了变量的初始化,仔细想想,确实是这样,我们在case 0 中定义了变量b,

在这个程序中,直到遇到switch的“}”右花括号,b的作用域才终结,也就是说 在case 1 和 default 分支中 变量b依然是可以访问的。考虑这样一种情况,

如果switch匹配了case 1,这样case 0的代码被跳过了,那么b就没有定义,如果此时在case 1的代码中访问了b,程序会崩溃的。如果谁也不匹配,执行default

也会有同样的危险。

知道了错误的原因,解决起来就很简单了

1,将case 0 标记 的代码用 {}括起来,这样b的作用域在这个花括号内。在其他的case 标记中不能访问。

2. 将 变量b放在 switch外面 定义。

时间: 2024-11-05 11:56:26

error: crosses initialization of的相关文章

error: jump to case label与crosses initialization of"xx"编译错误

前言 我过去使用vs下的cl编译程序时,从没遇到过此类错误,今天在Qt 5.3的MINGW版本下编译程序时,却出现 error: jump to case label与crosses initialization of"xx"编译错误. 解决方案 在switch语句的内部(包括case语句的内部)都不能声明变量,如需要声明,请在switch语句外面.

启动hive报错[ERROR] Terminal initialization failed; falling back to unsupported

启动hive时报如下的错误[ERROR] Terminal initialization failed; falling back to unsupported 解决办法:进入到hadoop安装目录下的share/hadoop/yarn下删除 jline的jar文件.再启动hive即可 版权声明:本文为博主原创文章,未经博主允许不得转载.

[ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

1:出现此种错误应该是jar版本包冲突了,启动hive的时候,由于hive依赖hadoop,启动hive,会将hadoop的配置以及jar包等等导入到hive中,导致jar包版本冲突,下面贴一下错误,然后贴一下解决方法: 1 [[email protected] bin]# ./hive 2 3 Logging initialized using configuration in jar:file:/home/hadoop/soft/apache-hive-1.2.1-bin/lib/hive-

goto语句引起的crosses initialization of XXX

1. 背景 goto语句虽然目前已经不提倡使用,但是用起来还是很方便,尤其是老代码中见的比较多. 在改动有goto语句的老代码时需要特别注意,是否跳过来资源的释放.有用变量的初始化等等. 很久之前写c程序时,有些提交系统要求变量必须在函数开始地方全部申明,最近遇到了"crosses initialization of XXX"知道为什么了.就是因为有可能跳过变量的声明. 2. 代码例子 例子1: 1 #include <iostream> 2 class Test{ 3 p

Application MyTest has not been registered. This is either due to a require() error during initialization or failure to call AppRegistry.registerComponent.

运行react-native项目时报错. 说明一下:项目本来是好的,再次运行就报错了 解决解决办法倒是有,不过具体什么原因不知道.希望有知道具体原因的童鞋能够补充一下 第一种情况:真的是注册的时候写错了.也就是这段话注册的不对: AppRegistry.registerComponent('MyDemo', () => MyDemo); 注意:‘MyDemo’这个是项目名 MyDemo这个你可以随自己你喜好指定. 第二种情况:也就是其他情况,你感觉什么都是好的但是运行起来还是会报这个错误.那么很

error: jump to label ‘XXXX’ [-fpermissive]

http://www.cnblogs.com/foohack/p/4090124.html 下面的类似的源码在MSVC上能正确编译通过.但是gcc/g++上就会错: 1. if(expr)2. goto error; 3. size_t var = 0; 4.error:5 error_handle(); 4:1: error: jump to label ‘error’ [-fpermissive]2:35: error: from here [-fpermissive] 3:9: error

C++中switch 语句中的变量声明和

switch 内部的变量定义: 1 int i = 1; 2 switch(i) 3 { 4 case 0: 5 string str; //error 6 int val1 = 0; //error 7 int val2; //right 8 int val3; val3 = 0; //right 9 case 1: 10 val2 = 9; 11 cout << val2 << endl; 12 } <C++ Primer> P163: 如果在某处一个带有初始值的变

安装MySQL-python报错error: command &#39;gcc&#39; failed with exit status 1

[[email protected] MySQL-python-1.2.3]# python setup.py install function) .... _mysql.c:133: error: 'ER_SYNTAX_ERROR' undeclared (first use in this function) _mysql.c:380: error: '_mysql_ConnectionObject' has no member named 'connection' _mysql.c:382

ERROR: unable to bind listening socket for address &#39;127.0.0.1:9000&#39;: Address already in use (98)

刚安装完PHP,启动时报错: # /etc/init.d/php-fpm start Starting php-fpm [15-Apr-2017 13:21:13] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98) [15-Apr-2017 13:21:13] ERROR: FPM initialization failed failed 解决方法: #