Visual c++ 在Windows 8 for Visual Studio 2012上构建OpenCV 2.4.6时出现“最小值(&max)不是std成员”错误

Visual c++ 在Windows 8 for Visual Studio 2012上构建OpenCV 2.4.6时出现“最小值(&max)不是std成员”错误,visual-c++,opencv,visual-studio-2012,build,Visual C++,Opencv,Visual Studio 2012,Build,我正试图在VisualStudio2012的Windows8上构建OpenCV 2.4.6。从中下载源代码后,我使用cmake生成并保留默认配置,然后将生成的文件ALL_BUILD.vcxproj加载到Visual Studio 2012中。然后我试着建造它。有几个模块确实可以构建,例如core、flann、imgproc等。。。但我正在尝试构建highgui,以便可以使用PDB文件调试无法打开视频文件的代码。生成错误从以下错误和许多类似错误开始: 错误C2039:“max”:不是“std”C:

我正试图在VisualStudio2012的Windows8上构建OpenCV 2.4.6。从中下载源代码后,我使用cmake生成并保留默认配置,然后将生成的文件ALL_BUILD.vcxproj加载到Visual Studio 2012中。然后我试着建造它。有几个模块确实可以构建,例如core、flann、imgproc等。。。但我正在尝试构建highgui,以便可以使用PDB文件调试无法打开视频文件的代码。生成错误从以下错误和许多类似错误开始:

错误C2039:“max”:不是“std”C:\OpenCV2.4.6\3rdparty\openexr\Imath\ImathMatrixAlgo.cpp 1094 1 IlmImf的成员

对于这样的错误,一个修复方法是添加include,这样我想了解如何在不更改源的情况下在我的机器上构建它

我是否在配置步骤中遗漏了什么?我的机器上是否缺少一些路径设置等?为什么我会出现这些错误?我应该如何修复它们

=============编辑==========

查看目录路径,这似乎是第三方依赖项之一OpenEXR的问题。看起来似乎是OpenCV 2.4.6中使用的OpenEXR版本1.7.1。OpenCV快速启动状态下的说明:

对于Eigen库,同样需要下载并提取到D:/OpenCV/dep目录。 与上述OpenEXR相同。 因此,我下载并提取了生成的文件,将目录openexr-1.7.1放入C:\OpenCV2.4.6\dep

然后我运行cmake并尝试构建最终的VisualStudio解决方案。遗憾的是,我看到了同样的错误。

您可能需要定义NOMINMAX。试着把它放在任何其他包含之前。 如果这有帮助,那么输入项目的预处理器定义


这方面有很多信息,只需搜索NOMINMAX

我在编译OpenEXR时遇到了同样的问题。然后我在谷歌上找到了解决方案

在使用VS2013预览时,必须在使用std::min和std::max的文件中添加include行

我把这一行放进调用这些方法的文件中,瞧!编译成功

#include <iostream> 
#include <algorithm>

只要在cpp文件中包含以上两行,编译错误就会消失。

我想我知道我做错了什么:我可能必须安装第三方依赖项,而不是依赖OpenCV目录中的文件。我只是在试用OpenEXR,看看先安装它是否有帮助。祝我好运!试着定义NominMax我会把它放在哪里?正如我提到的,我不想编辑文件,因为这是一个流行库的下载。必须能够像作者在没有编辑的情况下那样构建它,否则编辑本身就已经在代码中了?您需要将它放在项目中,而不是库中。这是一个MSVC的东西。我没有一个项目-我正在尝试构建从他们的githubI下载的Opencv库,我在Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions下添加了一个失败的项目llmlmf的/D NOMINMAX标志,但构建该项目仍然会出现类似C2039的错误:“max”:不是“std”和C3861的成员:“max”:找不到标识符对不起,我不知道,然后试着在这里发帖:谢谢@Shodan。到目前为止,我一直拒绝更改源文件。我推断这是一个很受欢迎的库,有很多人在Windows上构建它,因此必须有一个不涉及源文件编辑的正确修复。但您提到的OpenCV错误报告让我信服了:-@akazakov对如何/在何处添加include有一个很好的提示。奇怪的是,我在本地构建OpenCV时遇到的许多问题只有在我使用Visual Studio 2012时使用Visual Studio 2013的其他人才能面对,但我会尽量不为此烦恼。我的荣幸@Dumblead: