我必须使用名为 RTMaps(基于 block 的编程环境)的软件工具来进行基于视觉的实时控制。我习惯了 OpenCV 和 RTMaps 支持在 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/