当我尝试编译一些代码(不是我自己的代码)时,我得到一个C2589'(':'::'
右侧的非法令牌在这一行:
maxPosition[0]=std::numeric_limits<double>::min();
我想这是因为已经定义了一个min()宏,但是为什么编译器没有从指定的命名空间而不是宏中获取min()?
答案 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];
}