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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM