問題:使用std::numeric_limits<int>::max方法時,編譯器報warning C4003: “max”宏的實參不足。使用std::max、std::min和定義名為max、min方法時也報錯。
原因:由于頭文件Windows.h中的定義了宏max和min造成的。在Windows.h頭文件中定義了宏max和min,Preprocessor就認為我們使用的是宏max或min,而再調用時調用方法和參數與定義的宏不一致,所以報錯。
解決方案:用括號來改變Preprocessor對方法名的理解。
例:
// 使用numeric_limits中的max方法
(std::numeric_limits<Byte>::max)()
// 使用stl中的max方法
(std::max)( 1, 2 );
// 自定義名為max的方法
struct Number
{
int (max)();
};
參見:http://www.jeffhung.net/blog/articles/jeffhung/626/