Visual c++ ';最小值(&;max)不是std&x27;在Windows 8 for Visual Studio 2012上构建OpenCV 2.4.6时出错

Visual c++ ';最小值(&;max)不是std&x27;在Windows 8 for Visual Studio 2012上构建OpenCV 2.4.6时出错,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:\Op

我正试图在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的成员

针对此类错误(例如in)的一个修复方法是添加
#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
#include <iostream> 
#include <algorithm>
#包括

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

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