C++代码升级C++11编译报错常见问题及解决

近日代码编译升级C++11,编译中遇到的一些warning问题解决,且在C++11之前的编译版本代码没有任何报错(ERROR)和警告(WARNING)的情况下进行重编遇到的问题。

  • 旧版编译版本:g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  • 新版编译版本:g++ (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4

1、warning: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wliteral-suffix]

问题出现原因: c++ 11要求文字和标识符之间有空格(直译)

解决方式:变量和字符串之间需要使用空格间隔,

如:

"UpdateDeploy platetime[%"PRI64"]"

修改为:

"UpdateDeploy starttime[%" PRI64 "]"

2、warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

问题出现原因: 有符号int和无符号int 数据进行比较导致

解决方式:把int显示转化为unsigned int进行比较(是具体情况进行转变)

3、warning: deleting object of polymorphic class type ‘ClassName’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]

问题出现原因:原来如果基类里有虚函数,定义了基类指针指向派生类,就会需要定义基类虚析构,这样,基类指针析构的时候,就会先析构派生类,再析构基类。如果不定义虚析构,就会基类指针直接析构基类。这样派生类对象销毁不完整。所以编译器会警告。

解决方式:需要把基类中的析构函数声明为虚析构,这样销毁派生类对象时就能把子类析构函数也执行,若不声明为虚析构则子类未进行析构。

 

以上为目前遇到的问题,后续应该都在C++11上进行编译,不存在该现象。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值