admin管理员组

文章数量:1567744

程序编译会定位到错误:flann/util/serialization.h中std::unordered_map<XXX, XXX> no member named serialize()。
参考issue做了许多尝试最终解决了。
主要问题出在opencv头文件中的一些宏定义和flann库中的冲突,最后解决方案就是从自己的main函数所在文件中开始一步步查看头文件的包含顺序,一定要保证pcl库中依赖的flann在opencv头文件之前先包含进去。
比如我遇到这个问题的解决方法如下:

#include <stdexcept>
#include <opencv2/opencv.hpp>
#include "icp.hpp"
#include "depth_utils.hpp"

改为

#include <stdexcept>
#include "icp.hpp"
#include "depth_utils.hpp"
#include <opencv2/opencv.hpp>

即可。因为我的icp.h头文件包含了许多pcl头文件并且依赖了flann.

补充:因为我在进行点云处理时用到了kdtree,这个会依赖flann库。因为我这边把pcl和flann都根据自己的要求做了简化,作为一个第三方源码库可以对其内容随意添加修改,我尝试过在flann库中的serialization.h中添加#include<unordered_map>,或者在lsh_table.h中添加宏定义#define USE_UNORDERED_MAP 1 都不解决问题。

本文标签: 冲突PCLflannOpencv