Har*_*vey 56 c++ max visual-c++ numeric-limits
这行在小型测试程序中正常工作,但在我想要它的程序中,我得到以下编译器投诉:
#include <limits>
x = std::numeric_limits<int>::max();
c:\...\x.cpp(192) : warning C4003: not enough actual parameters for macro 'max'
c:\...\x.cpp(192) : error C2589: '(' : illegal token on right side of '::'
c:\...\x.cpp(192) : error C2059: syntax error : '::'
Run Code Online (Sandbox Code Playgroud)
我得到了相同的结果:
#include <limits>
using namespace std;
x = numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)
为什么它将max视为宏max(a,b); ?
Ste*_*idi 74
包含定义min或max宏的Windows标头时,通常会发生这种情况.如果您正在使用Windows标头,请#define NOMINMAX输入您的代码,或使用等效的编译器开关构建(即使用/ DNOMINMAX for Visual Studio).
请注意,构建时NOMINMAX禁用整个程序中的宏.如果您需要使用min或max操作,请使用std::min()或std::max()从<algorithm>标题中.
den*_*-bu 62
其他解决方案是使用括号括起函数名称,如下所示:(std::numeric_limits<int>::max)().同样适用于std::max.
不确定这是一个很好的解决方案... NOMINMAX是更好的IMO,但在某些情况下这可能是一个选项.
R S*_*hko 27
其他一些头文件使用max宏污染全局名称空间.您可以通过取消定义宏来解决这个问题:
#undef max
x = std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)