opencv编程解决warning C4003: “max”宏的实参不足
忘了把程序出错的代码附上了,运行修改好的程序才发现的。只好把问题的代码大致写一下了:
warning C4003: “min”宏的实参不足
error C2589: “(”:“::”右边的非法标记
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)();
//ps:这个算法比较靠谱,别的试了,没啥效果。
解决方法3:【比较方便】
所有引用 windows.h的地方: #include <windows.h>
换成 #include <qt_windows.h>
里面已经有qt对windows.h的适应化修改:
#ifndef NOMINMAX
# define NOMINMAX
#endif
#include <windows.h>
解决方法4:(不推荐,因为没啥作用,lz亲测)
又解决方法3可以看出,在使用windos.h之前定义 NOMINMAX即可