我正在使用OpenCV 2.4.2和Point Cloud Library 1.6.0。
我的程序工作正常,直到我添加行...
#include <pcl/segmentation/segment_differences.h>
当我尝试编译时会导致错误。我明白了......
Error 93 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 424
Error 94 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 425
Error 95 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 427
Error 96 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 514
Error 97 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 520
C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
could be 'flann'
or 'cv::flann'
所以看起来OpenCV附带的Flann文件与PCL中的Flann文件发生冲突。
有什么建议吗?
这里有一个类似的问题 PCL, OpenCV and flann conflict 但这是一个略有不同的错误...
所以在我之前的main.cpp文件中
使用命名空间pcl; 使用命名空间cv;
我评论了这两个并更新了程序以使用cv :: Mat等
但是当我添加...时,我仍然在编译时遇到错误。
#include <pcl/segmentation/segment_differences.h>
C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
could be 'flann'
or 'cv::flann'
我刚尝试将include \ opencv2 \ flann \重命名为include \ opencv2 \ flanncv \并将一堆opencv标头中的includes更新到这个新的flanncv目录。我仍然遇到上述错误...
答案 0 :(得分:4)
因此,无需重建内容即可修复此问题,即为其添加空命名空间
更改实例 FLANN ::东西 至 :: FLANN ::东西
我认为它有效地告诉它使用全局命名空间而不是cv命名空间。
答案 1 :(得分:0)
嗯,我在linux下使用pcl和openCv,但这里是
问题是两个库都包含头文件flann / flann.hpp或类似的东西,其中定义了名称空间flann。
现在我不知道你的机器上是如何安装这些库的,但我会假设你使用的是pcl和openCv的无法安装版本,因此每个库都带有自己的flann库。
通常在两个库的CMakeLists中都有一行来搜索flann库,例如:INCLUDE_LIBRARY($(flann)REQUIRED)
解决方案可能是删除两个已安装的库pcl和openCv。然后从他们的网站下载并安装flann。然后下载openCv和pcl的每晚构建,编译它们,它们应该能够找到相同的flann实例,因此问题可能会得到解决
修改强> 还有一个想法,也许问题只是因为你在代码中使用了这个问题:
using namespace pcl;
using namespace cv;
所以你有两个不同的实例来自flann名称空间。删除“using namespace”并在代码中使用pcl :: thepclclass,cv :: theopencvclass,看看是否有帮助
祝你好运答案 2 :(得分:0)
解决方案只是在flann之前添加双重冒号(::
)
一切都会好起来的。
例如,它是:
flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);
成为:
::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);