从VC到g++遇到的事
最近做的项目,需要把代码从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++遇到的事的更多相关文章
- 关于虚拟继承类的大小问题探索,VC++ 和 G++ 结果是有区别的
昨天笔试遇到个 关于类占用的空间大小的问题,以前没怎么重视,回来做个试验,还真发现了问题,以后各位笔试考官门,出题时请注明是用什么编译器. vc6/vc8 cl 和 Dev-C 的g++ 来做的测试: ...
- 《Visual C++ 2010入门教程》系列一:关于Visual Studio、VC和C++的那些事
原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115606.html 作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我 ...
- 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?
五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...
- 验证码I
package com.ah.testjava.validatecode; import java.awt.Color; import java.awt.Font; import java.awt.G ...
- 写一个Windows上的守护进程(2)单例
写一个Windows上的守护进程(2)单例 上一篇的日志类的实现里有个这: class Singleton<CLoggerImpl> 看名字便知其意--单例.这是一个单例模板类. 一个进程 ...
- 至尊快速,国产语言RPP 1.83强势来袭
以下是 R++的性能測试数据:(奔腾 1.86GHZ,測试 3 次取平均值) 执行效率: R++的内部结构和 C++大致同样,所以理论上 R++能够达到和 C++一样的执行速度,眼下 R++已开启汇编 ...
- Codeforces 458C - Elections
458C - Elections 思路: 三分凹形函数极小值域 代码: #include<bits/stdc++.h> using namespace std; #define ll lo ...
- pthread动态库命名规则
Library naming-------------- Because the library is being built using various exceptionhandling sche ...
- OpenCV/CUDA/Qt 环境配置小结
OpenCV Qt CUDA windows环境下 配置 反复装过几次,每次都网搜攻略:自个做个记录 方便以后使用. 碰到OpenCV各种奇怪的错误 先看看 图片imread() 有没有读空 再找其他 ...
随机推荐
- Objective-C--Runtime机制
个人理解: 简单来说,Objective-C runtime是一个实现Objective-C语言的C库.对象可以用C语言中的结构体表示,而方法(methods)可以用C函数实现.事实上,他们 差不多也 ...
- ubuntu下git clone 出现Permission denied (publickey).
今天在ubuntu上使用git 克隆 github上面的库,一直权限拒绝Permission denied (publickey). 公钥绑了好几次,都不行: 最后怀疑是git配置公钥地址有问题:打开 ...
- Raphaël.js学习笔记
Rapheal.js 是一个矢量图绘图库.对于支持HTML5 SVG的浏览器使用SVG绘图,不支持SVG的IE(ie6,7,8)使用VML绘图.所以Raphael.js的兼容性非常好. Raphael ...
- PHP替换数据库的换行符
//php 有三种方法来解决 //1.使用str_replace 来替换换行 $str = str_replace(array("\r\n", "\r", &q ...
- PrintWriter 和 BufferedWriter 写入文件.
Ref: should I use PrintWriter to wrap BufferedWriter? The main reason for using PrintWriter is the w ...
- Creating a web application.
About creating web GIS applications As you learn and use ArcGIS for Server, you'll probably reach th ...
- asp.net mvc生命周期学习
ASP.NET MVC是一个扩展性非常强的框架,探究其生命周期对用Mock框架来模拟某些东西,达到单元测试效果,和开发扩展我们的程序是很好的. 生命周期1:创建routetable.把URL映射到ha ...
- 如何制作css3的3d动画——以骰子旋转为例,详解css3动画属性
首先先来看两个用css3实现的炫酷的3d动画效果 1 2 3 4 5 6 你没看错,这个炫酷的效果都是用css3实现的. 下面是动画实现所需要用到的几个css3属性. 1.perspective: ...
- Base64的用法
如果要对一些图片进行保存,把他的文件名变成乱码,不让用户把他删掉,可以用Base64把他删掉用法如下: //获取访问图片的路径 String path=editText.getText().toStr ...
- c++实现的Array数据结构
1.Array.h,Array<T>的定义 template <class T> class Array { protected: T *data; //一个指向数组数据的指针 ...