错误C2589 on std :: numeric_limits <double> :: min()</double>

时间:2009-12-01 12:29:23

标签: c++ visual-c++ macros compiler-errors

当我尝试编译一些代码(不是我自己的代码)时,我得到一个C2589'(':'::'

右侧的非法令牌

在这一行:

    maxPosition[0]=std::numeric_limits<double>::min();

我想这是因为已经定义了一个min()宏,但是为什么编译器没有从指定的命名空间而不是宏中获取min()?

3 个答案:

答案 0 :(得分:7)

  

但是为什么编译器没有从指定的命名空间而不是宏中获取min()?

因为宏不关心有关命名空间,语言语义或编译器的信息。预处理发生在第一次

换句话说,编译器只能看到预处理阶段之后剩下的内容。并且min被替换为一些替换字符串,结果就是编译器看到的结果。

答案 1 :(得分:0)

在有问题的std :: numeric_limits :: min()函数上击中F12

引向某些 like

c:\ Program Files(x86)\ Windows Kits \ 8.1 \ Include \ shared \ minwindef.h

在哪里可以找到:

#ifndef NOMINMAX

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif

因此添加

#define NOMINMAX
在任何#include标头应纠正此问题之前,

.cpp文件顶部(例如WINAPI:请参见Windows.h)。

答案 2 :(得分:0)

将此添加到文件顶部。我敢肯定,这只是链接器在Visual Studio中工作方式的错误。每当操作员重载时,您有时都会得到此信息。

using namespace std;

在我看来,这可行

 for (int i = min(size_used_, other.size_used_) - 1; i >= 0; --i) {
  result += data_[i] * other.data_[i];
}

如果不是这样

 for (int i = std::min(size_used_, other.size_used_) - 1; i >= 0; --i) {
  result += data_[i] * other.data_[i];
}