这一行在一个小的测试程序中工作正常,但在我想要它的程序中,我得到了以下编译器的抱怨:
#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);?
发布于 2012-11-26 22:02:06
另一种解决方案是将函数名用括号括起来,如:(std::numeric_limits<int>::max)()
。这同样适用于std::max
。
我不确定这是不是很好的解决方案...NOMINMAX是更好的IMO,但在某些情况下这可能是一种选择。
发布于 2009-12-15 09:11:52
其他一些头文件正在用一个最大宏来污染全局名称空间。您可以通过取消定义宏来解决此问题:
#undef max
x = std::numeric_limits<int>::max();
发布于 2015-01-23 11:16:16
#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
https://stackoverflow.com/questions/1904635
复制相似问题