我遇到std::max
的问题。我无法理解。
int border = 35;
int myInt = 2;
int myOtherInt = 3;
int z = std::max(myInt + 2 * border, myOtherInt + 2 * border);
我已经包含了算法标准头。当我超过最大值时,我得到了:
错误:预期标识符
编译错误:
错误C2589:
'('
:'::'
右侧的非法令牌 错误C2059:语法错误:'::'
有什么问题?
答案 0 :(得分:56)
由于您正在使用VC ++,所以有一个猜测 - 把它放在任何#include
之前:
#define NOMINMAX
windows.h
定义了名为min
和max
的宏,如下所示:
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))
自从C ++标准化之前,Windows SDK已经包含了这些宏,但由于它们显然会对C ++标准库造成严重破坏,因此可以定义NOMINMAX
宏以防止它们被定义。
通常,如果您使用的是C ++(而不是C)并且包含windows.h
,则始终首先定义NOMINMAX
。
答案 1 :(得分:15)
如果你使用的是VC ++,可以在包含任何标题之前使用#define NOMINMAX
,或者(std::max)(myInt + 2 * border, myOtherInt + 2 * border)
答案 2 :(得分:2)
我会说max
#define
或其他内容,或者您需要通过std::max<int>
明确调用模板。
答案 3 :(得分:2)
“使用”声明(请参阅using Declaration)是另一种解决此问题的方法:
int border = 35;
int myInt = 2;
int myOtherInt = 3;
using std::max;
int z = max(myInt + 2 * border, myOtherInt + 2 * border);
它允许在没有明确限定的情况下使用std :: max。
答案 4 :(得分:0)
您是否尝试过使用::std::max
?如果这不起作用,就会弄乱你的std命名空间。