首页 > 其他 > 详细

从VC到g++遇到的事

时间:2014-09-16 15:37:50      阅读:496      评论:0      收藏:0      [点我收藏+]

最近做的项目,需要把代码从VC移植到g++下编译,在这个过程中,遇到了几个平台相关的问题——在VC下顺利编译的代码,但在g++中编译报错。

这里贴出来给大家分享一下:

 

1. 枚举类型

问题代码

enum MyWeek
{
    Monday,
    Tuesday,
};

MyWeek mw = MyWeek::Monday;

VC

d:\VC\main.cpp(17) : warning C4482: 使用了非标准扩展: 限定名中使用了枚举“MyWeek”

g++

main.cpp:11:14: error: ‘MyWeek’ is not a class or namespace
  MyWeek mw = MyWeek::Monday;
              ^

总结

MyWeek::Monday不是C++标准,所以应该尽量避免这种写法。有一个建议是在命令枚举时加上枚举类型的前缀,这样可以有效避免枚举名重复的情况。比如

enum MyWeek
{
    MW_Monday,
    MW_Tuesday,
};

2. std::map::cbegin()

问题代码

std::map<int, int>::const_iterator cIter = testMap.cbegin();

VC

顺利编译通过

g++

main.cpp:7:53: error: ‘class std::map<int, int>’ has no member named ‘cbegin’
  std::map<int, int>::const_iterator cIter = testMap.cbegin();
                                                     ^

总结

这个结果是在g++4.8.2跑的,说明在g++下,map::cbegin, map::cend之类的方法都是没有的。

3. #include<map >

include的头文件中如果存在空格,在VC下是没有问题的,但是在g++下会报错。

main.cpp:2:16: fatal error: map : 没有那个文件或目录
 #include <map >
                ^
compilation terminated.

从VC到g++遇到的事

原文:http://www.cnblogs.com/quark/p/3974847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!