最近做的项目,需要把代码从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.

4. 类成员函数声明前加上了类修饰符

问题代码

class A
{
void A::M();
};

VC

顺利编译通过

g++

main.cpp:6:7: error: extra qualification ‘A::’ on member ‘M’ [-fpermissive]
void A::M();
^

5. >>

问题代码

std::map<int, std::map<int, int>> testMap;

VC

顺利编译通过

g++

main.cpp:4:32: error: ‘>>’ should be ‘> >’ within a nested template argument list
std::map<int, std::map<int, int>> testMap;
^

总结

这个问题经常遇到啊,在写模板代码的时候要注意,两个’>’不能挨到一起,中间要加个空格。

6. itoa

g++只有atoi,没有itoa,好奇葩。

从VC到g++遇到的事的更多相关文章

  1. 关于虚拟继承类的大小问题探索,VC++ 和 G++ 结果是有区别的

    昨天笔试遇到个 关于类占用的空间大小的问题,以前没怎么重视,回来做个试验,还真发现了问题,以后各位笔试考官门,出题时请注明是用什么编译器. vc6/vc8 cl 和 Dev-C 的g++ 来做的测试: ...

  2. 《Visual C++ 2010入门教程》系列一:关于Visual Studio、VC和C++的那些事

    原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115606.html 作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我 ...

  3. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

  4. 验证码I

    package com.ah.testjava.validatecode; import java.awt.Color; import java.awt.Font; import java.awt.G ...

  5. 写一个Windows上的守护进程(2)单例

    写一个Windows上的守护进程(2)单例 上一篇的日志类的实现里有个这: class Singleton<CLoggerImpl> 看名字便知其意--单例.这是一个单例模板类. 一个进程 ...

  6. 至尊快速,国产语言RPP 1.83强势来袭

    以下是 R++的性能測试数据:(奔腾 1.86GHZ,測试 3 次取平均值) 执行效率: R++的内部结构和 C++大致同样,所以理论上 R++能够达到和 C++一样的执行速度,眼下 R++已开启汇编 ...

  7. Codeforces 458C - Elections

    458C - Elections 思路: 三分凹形函数极小值域 代码: #include<bits/stdc++.h> using namespace std; #define ll lo ...

  8. pthread动态库命名规则

    Library naming-------------- Because the library is being built using various exceptionhandling sche ...

  9. OpenCV/CUDA/Qt 环境配置小结

    OpenCV Qt CUDA windows环境下 配置 反复装过几次,每次都网搜攻略:自个做个记录 方便以后使用. 碰到OpenCV各种奇怪的错误 先看看 图片imread() 有没有读空 再找其他 ...

随机推荐

  1. Android中多线程下载列表的封装实现(含进度反馈)

    来源:http://blog.csdn.net/u011638883/article/details/17347015 实现了一下Android中的文件多线程下载模块,支持自定义线程数.断点续传.下载 ...

  2. Java基础知识强化08:将字符串倒序输出(包括空格)的几种方法

    1.最容易想到的估计就是利用String类的toCharArray(),再倒序输出数组的方法了: package himi.hebao05; public class TestDemo02 { pub ...

  3. jad批量反编译class和jadeclipse集成到eclipse的设置方法

    安装jad配置 1.从http://varaneckas.com/jad/下载windows版本的jad.exe 2.安装完毕后配置jad的系统环境变量 批量解压jar和class文件 1.使用7zi ...

  4. Python开发【第二十篇】:缓存

    Python开发[第二十篇]:缓存redis&Memcache   点击这里 Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy ...

  5. <input value="hidden">的作用

    这样子上个页面的参数可以保存在这个页面,为下个页面获取参数做准备,在这个页面表单提交的时候下个页面可以获取参数

  6. win2008 64位下.net 无法访问oracle

    这两天换了台新机子,就想弄个新系统win2008 64bit来测试下,也尝尝新鲜,结果是碰的头破血流啊,哈哈就像挖宝似的 环境:win2008 64bit + IIS7+.net2.0 +ORACLE ...

  7. sql根据'/'截取最后的字符串

    filpath字段值:/DataFile/UpLoad/Logo/NoPhoto.jpg select filpath,REVERSE((SUBSTRING(REVERSE(FilPath),0,CH ...

  8. IOS 生成设备唯一标识

    前言 iOS设备5.0以上放弃使用[[UIDevice currentDevice] uniqueIdentifier]来获得设备唯一ID iOS设备私有方法禁止用户获取和使用IMEI 需求 需要一个 ...

  9. What's the use of @ before the path defination

    When you define your path const : const string Child_Medical_Pdf = @"~/Media/ChildPdf"; Th ...

  10. QT QSettings 操作(导入导出、保存获取信息)*.ini文件详解

    1.QSettings基本使用 1.1.生成.ini文件,来点实用的代码吧. QString fileName;fileName = QCoreApplication::applicationDirP ...