std :: max - 期望一个标识符

时间:2011-08-12 02:26:45

标签: c++

我遇到std::max的问题。我无法理解。

int border = 35;
int myInt = 2;
int myOtherInt = 3;
int z = std::max(myInt + 2 * border, myOtherInt + 2 * border);

我已经包含了算法标准头。当我超过最大值时,我得到了:

  

错误:预期标识符

编译错误:

  

错误C2589:'(''::'右侧的非法令牌   错误C2059:语法错误:'::'

有什么问题?

5 个答案:

答案 0 :(得分:56)

由于您正在使用VC ++,所以有一个猜测 - 把它放在任何#include之前:

#define NOMINMAX

windows.h定义了名为minmax的宏,如下所示:

#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命名空间。