std :: numeric_limits <double> :: min()上的错误C2589

Mat*_*Mat 4 c++ macros compiler-errors visual-c++

当我尝试编译一些代码(而不是我自己的代码)时,我得到一个C2589'(':'::'右侧的非法令牌

在这条线上:

    maxPosition[0]=std::numeric_limits<double>::min();
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ski 7

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

因为宏不关心您的命名空间,语言语义或编译器.预处理首先发生.

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


bit*_*ner 5

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

导致一些地方

c:\ Program Files(x86)\ Windows Kits \ 8.1 \ Include \共享\ 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
Run Code Online (Sandbox Code Playgroud)

所以添加

#define NOMINMAX
Run Code Online (Sandbox Code Playgroud)

在任何 #include 标头之前添加到 .cpp 文件顶部(如 WINAPI 所做的那样:请参阅 Windows.h 作为示例)。