在实战中, 遇到过两次crosses initialization of... 编译错误, 这很easy啦, 两次的原因分别是:

1. switch的case中有定义变量。

解决办法是在case语句中不要定义变量,在switch之前定义

2. goto跳过了变量的定义。

在跳转之前进行变量定义,注意goto语句位置

1. 背景

goto语句虽然目前已经不提倡使用,但是用起来还是很方便,尤其是老代码中见的比较多。

在改动有goto语句的老代码时需要特别注意,是否跳过来资源的释放、有用变量的初始化等等

很久之前写c程序时,有些提交系统要求变量必须在函数开始地方全部申明,最近遇到了"crosses initialization of XXX"知道为什么了。就是因为有可能跳过变量的声明。

2. 代码例子

例子1:

#include <iostream>
class Test{
public:int a;
};int main(){Test t1;std::cout << "ok" << std::endl;goto _Lab1;Test *t2 = new Test; //1//Test t2;  //2
_Lab1:std::cout << t2->a << std::endl;    //1//std::cout << t2.a << std::endl;   //2return 0;
}

从代码中也可以看出来,

(1) 在只打开第一种情况下,“goto _Lab1”跳过来t2变量的定义,导致t2没有初始化。编译报错。

(2) 在只打开第二种情况下,由于Test类没有显示构造函数,编译器会提供无参数的默认构造函数。编译正常。执行后t2.a 是随机的int值。

例子2:

#include <iostream>
class Test{
public:Test(int _a):a(_a){};   //提供显示构造函数int a;
};int main(){Test t1(1);std::cout << "ok" << std::endl;goto _Lab1;Test t2(3); //没有执行初始化
_Lab1:std::cout << t2.a << std::endl;return 0;
}

Test类显示提供了带参数构造函数后,t2由于goto语句导致未初始化,编译失败。

两次碰到编译错误: crosses initialization of...相关推荐

  1. 两个常见Qt编译错误的解决

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 作者:朱 ...

  2. VS中DLL的导出宏的定义和头文件的位置导致的两类编译错误总结

    一般地,我们在新建一个win32的动态链接库(DLL)时,会采取如下的方式的来编写导出接口文件(.h). #pragma once#ifndef API_EXPORT #define DECL_API ...

  3. ora 00900 已编译但有错误_技术分享|万万没想到!编译错误竟然还没灭绝???

    CodeWisdom-技术分享 万万没想到!编译错误竟然还没灭绝??? 复旦大学CodeWisdom团队的代码分析和挖掘小组针对开源软件项目持续集成过程中出现的编译错误,进行了大规模的经验研究.该研究 ...

  4. CodeBlocks常见编译错误(to be updated)

    第一要则,不要直接点击"编译并且运行",而是应该点击"编译(build)"按钮,这样可以保证警告不会被忽略,一些警告是非常有用的. 第二要则:有多个错误,要先处 ...

  5. ant编译错误:不再支持源选项 1.5,请使用 1.6 或更高版本。

    在使用eclipse搭建uiautomator自动化测试环境时,碰到了ant编译报错问题:不再支持源选项 1.5,请使用 1.6 或更高版本. 网上各种查找都是maven编译错误:不再支持源选项 1. ...

  6. VS编译错误C4996 'scanf': This function or variable may be unsafe.

    最近用VS编写代码时,老碰到这个错误: C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s i ...

  7. 错误linux autocof.h,【技巧】一种提高 [ 定位Linux内核编译错误 ] 效率的方法

    前言:在编译一些非标准linux内核时,常会出现一些错误导致编译中止.这其中的大部分都能通过根据编译器报出的错误定位来查阅源码.找到相关的依赖配置,然后修正配置状态来解决.但也有时候从依赖逻辑中无法发 ...

  8. Delphi常见各类编译错误信息-中英对照

    整理自网上的文章,也忘了出处,无意冒犯,如有侵权,请提前通知,本博客将及时处理. 一. 编译错误信息 ';' not allowed before 'ELSE' ElSE前不允许有";&qu ...

  9. 编译错误 无法打开包括文件:“SDKDDKVer.h”: No such file or directory

    本机安装了两个版本的VS就可能会出现这个编译错误, 比如我机器上同时装了VS2012和VS2008. VS2012中关于Windows SDK的路径宏定义和VS2008不同,而在某种情况下VS2008 ...

  10. C2248编译错误的原因和解决--VC6向VC7.1迁移真是累死人,N多编译错误

    把以前VC6先写好的类加入VC7中,编译时竟然错误多到编译器无法接受而停止,hooooo.真的好烦,要是有个工具修改外加的.h和cpp文件就好了... 遇到最多的是C2248编译错误,才发现VC7提升 ...

最新文章

  1. eclipse安装SVN插件的两种方法
  2. java 深克隆_Java实现深克隆的两种方式
  3. mysql 磁盘组_AIX使用LV创建ASM磁盘组
  4. c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作
  5. 模拟光端机和数字光端机的优缺点介绍
  6. 《统计学习方法》(李航)读书笔记(转)
  7. PyTorch 1.0 中文文档:torch.sparse
  8. RAC 修改 ASM实例名 的步骤
  9. 【Leetcode_easy】724. Find Pivot Index
  10. 芥子空间破解游戏的加固保护案例
  11. WCF学习记录【一】
  12. Avatar Scaler
  13. python画出心形图
  14. gulp : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\gulp.ps1
  15. 第十一届蓝桥杯大赛决赛赛题 C++ 大学C组
  16. java电信计费项目,java毕业设计_springboot框架的电信计费
  17. 产品经理经常面临的系统须知大拷问
  18. 《机器学习》心得体会
  19. 微软推出折叠双屏设备Surface Neo 双屏玩法多样
  20. 内窥镜视频采集卡或视频采集设备有哪些

热门文章

  1. GROW GM65 条码二维码扫描识别模块 兼容大部分条码和二维码
  2. 高速光通信-调制概述
  3. 豆瓣排名前500的电视剧
  4. 交换友情链接时要谨防以下12种情况
  5. 【Pygame小游戏】确实会玩—教你如何在”吃豆豆“上完美躺赢……(收藏起来偷偷学)
  6. steam版拳皇14无法正常启动
  7. 零基础学前端难吗?前端好学吗?
  8. dw添加下拉菜单_用dreamweaver制作网站下拉菜单的实现教程
  9. android 5.0rom官方,Android 5.0刷机包开放下载 升级需谨慎
  10. 面试官:请实现单行文本居中,多行文本左对齐?