首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >警告C4003和错误C2589和C2059 on: x= std::numeric_limits<int>::max();

警告C4003和错误C2589和C2059 on: x= std::numeric_limits<int>::max();
EN

Stack Overflow用户
提问于 2009-12-15 09:08:29
回答 5查看 22.4K关注 0票数 59

这一行在一个小的测试程序中工作正常,但在我想要它的程序中,我得到了以下编译器的抱怨:

代码语言:javascript
复制
#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 : '::'

我使用以下命令得到相同的结果:

代码语言:javascript
复制
#include <limits>
using namespace std;

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

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

EN

回答 5

Stack Overflow用户

发布于 2012-11-26 22:02:06

另一种解决方案是将函数名用括号括起来,如:(std::numeric_limits<int>::max)()。这同样适用于std::max

我不确定这是不是很好的解决方案...NOMINMAX是更好的IMO,但在某些情况下这可能是一种选择。

票数 68
EN

Stack Overflow用户

发布于 2009-12-15 09:11:52

其他一些头文件正在用一个最大宏来污染全局名称空间。您可以通过取消定义宏来解决此问题:

代码语言:javascript
复制
#undef max
x = std::numeric_limits<int>::max();
票数 27
EN

Stack Overflow用户

发布于 2015-01-23 11:16:16

代码语言:javascript
复制
#ifdef max
#pragma push_macro("max")
#undef max
#define _restore_max_
#endif

#include <limits>

//... your stuff that uses limits

#ifdef _restore_max_
#pragma pop_macro("max")
#undef _restore_max_
#endif
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1904635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档