c++ - 如何克服 OpenCV 和 RTMaps 中 struct C++ 的双重声明?

标签 c++ opencv visual-studio-2012 declaration redefinition

我必须使用名为 RTMaps(基于 block 的编程环境)的软件工具来进行基于视觉的实时控制。我习惯了 OpenCVRTMaps 支持在 C++ 中创建我自己的 block ,所以我用 Opencv 编写了我的图像处理算法。

问题是,在 RTMaps 中,Iplimage 已经被定义为一种数据类型,所以当我尝试将我的代码集成到一个新 block 中时,我得到了这个讨厌的错误:

我怎样才能克服这个问题,而不是对同一类型进行双重声明?我需要 OpenCV 库中的其他函数/数据类型,但我无法更改 RTMaps 核心。

>c:\program files (x86)\intempora\rtmaps 4\include\maps_object_types.hpp(608): error C2011: '_IplROI' :
'struct' type redefinition
1>          D:\OpenCV\build\include\opencv2/core/types_c.h(326) : see declaration of '_IplROI'
1>c:\program files (x86)\intempora\rtmaps 4\include\maps_object_types.hpp(631): error C2011: '_IplImage' :
'struct' type redefinition
1>          D:\OpenCV\build\include\opencv2/core/types_c.h(284) : see declaration of '_IplImage'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6464): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6522): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6523): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6524): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6525): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7234): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7242): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7249): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7256): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7263): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7279): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7288): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7297): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7306): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7320): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7327): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7334): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7341): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7348): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7358): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7368): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7378): error C2872: 'ACCESS_MASK' :
ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7786): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(7787): error C2872: 'ACCESS_MASK' :
 ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1194): error C2872: 'ACCESS_MASK'
: ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1204): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1220): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1232): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1252): error C2872: 'ACCESS_MASK'
: ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1260): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1273): error C2872: 'ACCESS_MASK'
: ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1365): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1373): error C2872: 'ACCESS_MASK'
: ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1387): error C2872: 'ACCESS_MASK'
: ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winuser.h(1394): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winreg.h(65): error C2872: 'ACCESS_MASK' : ambiguous symbol
1>          could be 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winnt.h(6463) : DWORD ACCESS_MASK'
1>          or       'D:\OpenCV\build\include\opencv2/core/mat.hpp(60) : ACCESS_MASK'
1>src\maps_cameraCalibration.cpp(80): error C2027: use of undefined type '_IplImage'
1>          D:\OpenCV\build\include\opencv2/core/types_c.h(284) : see declaration of '_IplImage'
1>src\maps_cameraCalibration.cpp(80): error C2228: left of '.channelSeq' must have class/struct/union
1>src\maps_cameraCalibration.cpp(81): error C2027: use of undefined type '_IplImage'
1>          D:\OpenCV\build\include\opencv2/core/types_c.h(284) : see declaration of '_IplImage'
1>src\maps_cameraCalibration.cpp(81): error C2228: left of '.channelSeq' must have class/struct/union
1>src\maps_cameraCalibration.cpp(82): error C2027: use of undefined type '_IplImage'
1>          D:\OpenCV\build\include\opencv2/core/types_c.h(284) : see declaration of '_IplImage'
1>src\maps_cameraCalibration.cpp(82): error C2228: left of '.channelSeq' must have class/struct/union
1>  RailwayImageProcess.cpp

最佳答案

有一个宏告诉 RTMaps 避免重新定义 IplImage 结构。在您的 header 中,您需要按以下顺序编写您的包含:

#include <opencv2/opencv.hpp> //Or any other OpenCV header
#define __IPL_H__
#include "maps.hpp"

关于c++ - 如何克服 OpenCV 和 RTMaps 中 struct C++ 的双重声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140360/

相关文章:

c++ - 如何在 Qt 上运行 AudioOutput 示例代码?

css - 如何在 Web Essentials LESS 编译中忽略某些 LESS 文件? ( Bootstrap )

c++ - c++ std::vector 是如何工作的?

c++ - 创建窗口中的 hInstance

java - 无法从 javaCV FrameRecorder 类创建 java InputStream

c++ - OpenCV copyTo() 掩码错误

opencv - 从opencv imencode删除std::vector <unsigned char>时发生异常

c++ - 编写另一个以 LPCTSTR 开头的文本行的最佳方法是什么?

c# - 在VS2012中使用转储文件进行调试

c++ - 如何使用调试标志构建OpenCV