【转】解决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