[英]flann/util/serialization.h class std::unordered_map<unsigned int, std::vector<unsigned int> >' has no member named 'serialize'
I am trying to compile a project Kintinuous used pcl-1.7. 我正在尝试编译Kintinuous使用过的pcl-1.7项目。 However I got some errors. 但是我遇到了一些错误。 I am searching for a long time on Google, but I still have no idea. 我在Google上搜索了很长时间,但我仍然不知道。 I am a newcomer to programming. 我是编程的新手。 Please help me. 请帮我。 The errors look like this: 错误看起来像这样:
In file included from /usr/include/flann/util/matrix.h:35:0,
from /usr/include/flann/flann.hpp:41,
from /usr/include/pcl-1.7/pcl/kdtree/flann.h:50,
from /usr/include/pcl-1.7/pcl/kdtree/kdtree_flann.h:45,
from /data2/houzhixing/Kintinuous/src/backend/DeformationGraph.h:27,
from /data2/houzhixing/Kintinuous/src/backend/DeformationGraph.cpp:19:
/usr/include/flann/util/serialization.h: In instantiation of 'static void flann::serialization::access::serialize(Archive&, T&) [with Archive = flann::serialization::LoadArchive; T = std::unordered_map<unsigned int, std::vector<unsigned int> >]':
/usr/include/flann/util/serialization.h:26:30: required from 'void flann::serialization::serialize(Archive&, T&) [with Archive = flann::serialization::LoadArchive; T = std::unordered_map<unsigned int, std::vector<unsigned int> >]'
/usr/include/flann/util/serialization.h:35:40: required from 'static void flann::serialization::Serializer<T>::load(InputArchive&, T&) [with InputArchive = flann::serialization::LoadArchive; T = std::unordered_map<unsigned int, std::vector<unsigned int> >]'
/usr/include/flann/util/serialization.h:276:61: required from 'Archive& flann::serialization::InputArchive<Archive>::operator&(T&) [with T = std::unordered_map<unsigned int, std::vector<unsigned int> >; Archive = flann::serialization::LoadArchive]'
/usr/include/flann/util/lsh_table.h:319:10: required from 'void flann::lsh::LshTable<ElementType>::serialize(Archive&) [with Archive = flann::serialization::LoadArchive; ElementType = float]'
/usr/include/flann/util/serialization.h:18:9: required from 'static void flann::serialization::access::serialize(Archive&, T&) [with Archive = flann::serialization::LoadArchive; T = flann::lsh::LshTable<float>]'
/usr/include/flann/util/serialization.h:26:30: [ skipping 6 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/flann/util/serialization.h:18:9: required from 'static void flann::serialization::access::serialize(Archive&, T&) [with Archive = flann::serialization::LoadArchive; T = flann::LshIndex<flann::L2_Simple<float> >]'
/usr/include/flann/util/serialization.h:26:30: required from 'void flann::serialization::serialize(Archive&, T&) [with Archive = flann::serialization::LoadArchive; T = flann::LshIndex<flann::L2_Simple<float> >]'
/usr/include/flann/util/serialization.h:35:40: required from 'static void flann::serialization::Serializer<T>::load(InputArchive&, T&) [with InputArchive = flann::serialization::LoadArchive; T = flann::LshIndex<flann::L2_Simple<float> >]'
/usr/include/flann/util/serialization.h:276:61: required from 'Archive& flann::serialization::InputArchive<Archive>::operator&(T&) [with T = flann::LshIndex<flann::L2_Simple<float> >; Archive = flann::serialization::LoadArchive]'
/usr/include/flann/algorithms/lsh_index.h:204:9: required from 'void flann::LshIndex<Distance>::loadIndex(FILE*) [with Distance = flann::L2_Simple<float>; FILE = _IO_FILE]'
/data2/houzhixing/Kintinuous/src/backend/DeformationGraph.cpp:1054:1: required from here
/usr/include/flann/util/serialization.h:18:9: error: 'class std::unordered_map<unsigned int, std::vector<unsigned int> >' has no member named 'serialize'
type.serialize(ar);
^
/usr/include/flann/util/serialization.h: In instantiation of 'static void flann::serialization::access::serialize(Archive&, T&) [with Archive = flann::serialization::SaveArchive; T = std::unordered_map<unsigned int, std::vector<unsigned int> >]':
/usr/include/flann/util/serialization.h:26:30: required from 'void flann::serialization::serialize(Archive&, T&) [with Archive = flann::serialization::SaveArchive; T = std::unordered_map<unsigned int, std::vector<unsigned int> >]'
/usr/include/flann/util/serialization.h:40:56: required from 'static void flann::serialization::Serializer<T>::save(OutputArchive&, const T&) [with OutputArchive = flann::serialization::SaveArchive; T = std::unordered_map<unsigned int, std::vector<unsigned int> >]'
/usr/include/flann/util/serialization.h:294:61: required from 'Archive& flann::serialization::OutputArchive<Archive>::operator&(const T&) [with T = std::unordered_map<unsigned int, std::vector<unsigned int> >; Archive = flann::serialization::SaveArchive]'
/usr/include/flann/util/lsh_table.h:319:10: required from 'void flann::lsh::LshTable<ElementType>::serialize(Archive&) [with Archive = flann::serialization::SaveArchive; ElementType = float]'
/usr/include/flann/util/serialization.h:18:9: required from 'static void flann::serialization::access::serialize(Archive&, T&) [with Archive = flann::serialization::SaveArchive; T = flann::lsh::LshTable<float>]'
/usr/include/flann/util/serialization.h:26:30: [ skipping 6 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/flann/util/serialization.h:18:9: required from 'static void flann::serialization::access::serialize(Archive&, T&) [with Archive = flann::serialization::SaveArchive; T = flann::LshIndex<flann::L2_Simple<float> >]'
/usr/include/flann/util/serialization.h:26:30: required from 'void flann::serialization::serialize(Archive&, T&) [with Archive = flann::serialization::SaveArchive; T = flann::LshIndex<flann::L2_Simple<float> >]'
/usr/include/flann/util/serialization.h:40:56: required from 'static void flann::serialization::Serializer<T>::save(OutputArchive&, const T&) [with OutputArchive = flann::serialization::SaveArchive; T = flann::LshIndex<flann::L2_Simple<float> >]'
/usr/include/flann/util/serialization.h:294:61: required from 'Archive& flann::serialization::OutputArchive<Archive>::operator&(const T&) [with T = flann::LshIndex<flann::L2_Simple<float> >; Archive = flann::serialization::SaveArchive]'
/usr/include/flann/algorithms/lsh_index.h:198:9: required from 'void flann::LshIndex<Distance>::saveIndex(FILE*) [with Distance = flann::L2_Simple<float>; FILE = _IO_FILE]'
/data2/houzhixing/Kintinuous/src/backend/DeformationGraph.cpp:1054:1: required from here
/usr/include/flann/util/serialization.h:18:9: error: 'class std::unordered_map<unsigned int, std::vector<unsigned int> >' has no member named 'serialize'
make[2]: *** [CMakeFiles/backend.dir/backend/DeformationGraph.cpp.o] Error 1
make[1]: *** [CMakeFiles/backend.dir/all] Error 2
make: *** [all] Error 2
Thanks in advance. 提前致谢。
I had same issue on different library that depends on flann and fixed by https://github.com/mariusmuja/flann/issues/214 我在依赖flann的不同库上有相同的问题,并通过https://github.com/mariusmuja/flann/issues/214修复
We had a mysterious error in the serialization code if we included the flann headers after some opencv headers and used
g++ -std=c++11
. 如果在一些opencv标头之后包含flann标头,并使用g++ -std=c++11
,那么序列化代码中就会出现一个神秘的错误。 Changing the include order fixed the issue (including flann headers before any opencv headers). 更改包含顺序可解决此问题(在所有opencv标头之前包含flann标头)。 It seems that opencv headers leak#define USE_UNORDERED_MAP 1
in case of std ≥ C++11. 在#define USE_UNORDERED_MAP 1
++ 11的情况下,似乎opencv标头泄漏#define USE_UNORDERED_MAP 1
。 This then gets picked up by the#if
in lsh_table.h in the original flann library. 然后由原始flann库中的lsh_table.h中的#if
拾取。
The solution is to include flann before OpenCV. 解决方案是在OpenCV之前加入flann。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.