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()?
但是为什么编译器没有从指定的命名空间而不是宏中获取min()?
因为宏不关心您的命名空间,语言语义或编译器.预处理首先发生.
换句话说,编译器只能看到预处理阶段之后剩下的内容.而min被一些替换字符串替换,并且结果是什么编译器看到的.
在有问题的 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 作为示例)。