首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本征错误: please_protect_your_min_with_parentheses

本征错误: please_protect_your_min_with_parentheses
EN

Stack Overflow用户
提问于 2012-12-04 05:13:56
回答 1查看 330关注 0票数 6

我正在尝试通过运行软件包附带的测试代码来测试Eigen的NonLinear优化功能。

我被这些错误卡住了(更像是困惑):

代码语言:javascript
复制
Error   5   error C2039: 'please_protect_your_min_with_parentheses' : is not a member of 'std::numeric_limits<double>'  c:\program files (x86)\microsoft sdks\windows\v7.0a\include\eigen-eigen-5097c01bcdc4\unsupported\eigen\src\nonlinearoptimization\lmpar.h    184
Error   7   error C2039: 'please_protect_your_min_with_parentheses' : is not a member of 'std::numeric_limits<double>'  c:\program files (x86)\microsoft sdks\windows\v7.0a\include\eigen-eigen-5097c01bcdc4\unsupported\eigen\src\nonlinearoptimization\lmpar.h    28
Error   6   error C2065: 'please_protect_your_min_with_parentheses' : undeclared identifier c:\program files (x86)\microsoft sdks\windows\v7.0a\include\eigen-eigen-5097c01bcdc4\unsupported\eigen\src\nonlinearoptimization\lmpar.h    184
Error   8   error C2065: 'please_protect_your_min_with_parentheses' : undeclared identifier c:\program files (x86)\microsoft sdks\windows\v7.0a\include\eigen-eigen-5097c01bcdc4\unsupported\eigen\src\nonlinearoptimization\lmpar.h    28

顺便说一句,(我认为)导致这种情况的代码是这样的:

代码语言:javascript
复制
#define min(A,B) please_protect_your_min_with_parentheses

错误指的是这一行(在上面提到的两个不同位置,即第28行和第184行):

代码语言:javascript
复制
const Scalar dwarf = std::numeric_limits<Scalar>::min();

任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-04 05:19:59

它会要求您将行更改为以下一行:

代码语言:javascript
复制
const Scalar dwarf = (std::numeric_limits<Scalar>::min)();

因此,如果定义了类似min函数的宏时,它将不会被替换。

问题在于,Microsoft Windows头文件定义了Windows宏,因此包含min头文件的标准C++代码可能无法编译。如上所述,可移植C++库实现的解决方案是使用括号将它们对标准min函数的调用包装起来。您编译的测试代码似乎会检查代码是否使用了这种技术。

上述方法的问题在于,您将无法使用参数相关查找执行对min(a,b)的非限定调用,因为添加括号会导致名称独立于参数进行查找。

另一种可以应用于自己的代码的解决方案是在包含任何Windows头文件或取消定义min/max宏之前定义NOMINMAX标志。这通常不是由库代码完成的,因为它们不应该调整用户代码的配置。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13691822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档