zoukankan      html  css  js  c++  java
  • 【转】解决warning C4003: “min”宏的实参不足

    错误信息如下:

    1>f:qtqt5.1.15.1.1msvc2010includeqtcoreqdatetime.h(121): warning C4003: “min”宏的实参不足
    1>f:qtqt5.1.15.1.1msvc2010includeqtcoreqdatetime.h(121): error C2589: “(”:“::”右边的非法标记
    1>f:qtqt5.1.15.1.1msvc2010includeqtcoreqdatetime.h(121): error C2059: 语法错误:“::”

    原因分析:

    windows.h中定义了min宏,<QTime>中也有这个定义,两者冲突
    windows.h中Microsoft定义了min/max两个宏,Qt中定义的min/max两个宏虽然在自己的命名空间中,可还是被“污染”了。

    解决方法1:

    把include头文件顺序颠倒!
    #include <windows.h>#include <QTime>
    修改为#include <QTime>#include <windows.h>

    解决方法2:

    max前后用小括号括起来,在满足C++语法的同时,骗过了编译器的宏替换:

    const double MAXDOUBLE = (std::numeric_limits<double>::max)();

    解决方法3:

    所有引用 windows.h的地方:  #include <windows.h>
    换成 #include <qt_windows.h>
    里面已经有qt对windows.h的适应化修改:

    #ifndef NOMINMAX                       
    #  define NOMINMAX
    #endif
    #include <windows.h>

     解决方法4:

    又解决方法3可以看出,在使用windos.h之前定义 NOMINMAX即可

     

    //其实我的更简单,因为是自定义类中定义了max()和min()函数,所知知道原因之后,直接把函数改名字了

    o(∩_∩)o

  • 相关阅读:
    各个地区2.4G及5G信道一览表 [转]
    nf_conntrack
    串口 属性 设置 termios.h [转载&修改]
    802.3 Logical Link Control 协议相关
    HTTP协议中GET、POST和HEAD的介绍[转载]
    Android Shell、SSH、GCC安装与配置
    mybatis中sql语句总结
    [leedcode 128] Longest Consecutive Sequence
    [leedcode 126] Word Ladder
    [leedcode 125] Valid Palindrome
  • 原文地址:https://www.cnblogs.com/zsclucien/p/3574130.html
Copyright © 2011-2022 走看看