opencv编程解决warning C4003: “max”宏的实参不足

时间:2024-09-27 23:36:32

忘了把程序出错的代码附上了,运行修改好的程序才发现的。只好把问题的代码大致写一下了:

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即可