zoukankan      html  css  js  c++  java
  • 从VC到g++遇到的事

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

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

    1. 枚举类型

    问题代码

    enum MyWeek
    {
        Monday,
        Tuesday,
    };
    
    MyWeek mw = MyWeek::Monday;

    VC

    d:VCmain.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,好奇葩。

  • 相关阅读:
    web.xml文件的作用
    GitHub上最火的40个Android开源项目
    iOS 开发者必不可少的 75 个工具,你都会了吗
    canvas小知识
    最全的PHP开发Android应用程序
    Android系统在超级终端下必会的命令大全(adb shell命令大全)
    Android adb shell命令大全
    如何制作和部署war包
    android学习视频(实战项目演练)
    s:iterator标签的使用
  • 原文地址:https://www.cnblogs.com/quark/p/3974847.html
Copyright © 2011-2022 走看看