忘了把程序出錯的代碼附上了,運行修改好的程序才發現的。只好把問題的代碼大致寫一下了:
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即可