【转】解决warning C4003: “min”宏的实参不足

错误信息如下:

1>f:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qdatetime.h(121): warning C4003: “min”宏的实参不足
1>f:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qdatetime.h(121): error C2589: “(”:“::”右边的非法标记
1>f:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qdatetime.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

posted @ 2014-02-28 18:12  Sachin  阅读(2400)  评论(0编辑  收藏  举报