如何解决—— warning C4003 and errors C2589 and C2059 on: x = std::numeric_limits::max();?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (95)

该行在一个小测试程序中正常工作,但在我想要的程序中,我得到以下编译器报错:

#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 : '::'

我得到相同的结果:

#include <limits>
using namespace std;

x = numeric_limits<int>::max();

为什么它将max看作宏max(a,b); ?

提问于
用户回答回答于

当包含定义一个min或一个max宏的Windows头时,通常会发生这种情况。如果你使用的是Windows头文件,请#define NOMINMAX输入你的代码,或者使用等效的编译器开关构建(即使用Visual Studio的/ DNOMINMAX)。

请注意,NOMINMAX在整个程序中禁用宏的构建。如果你需要使用minmax操作,请使用std::min()std::max()<algorithm>标题中。

用户回答回答于

其他的解决方案是用这样的括号来包装函数名:(std::numeric_limits<int>::max)()

同样适用于std::max

扫码关注云+社区

领取腾讯云代金券