繁体   English   中英

flann / util / serialization.h类std :: unordered_map <unsigned int, std::vector<unsigned int> &gt;&#39;没有名为&#39;serialize&#39;的成员

[英]flann/util/serialization.h class std::unordered_map<unsigned int, std::vector<unsigned int> >' has no member named 'serialize'

我正在尝试编译Kintinuous使用过的pcl-1.7项目。 但是我遇到了一些错误。 我在Google上搜索了很长时间,但我仍然不知道。 我是编程的新手。 请帮我。 错误看起来像这样:

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

提前致谢。

我在依赖flann的不同库上有相同的问题,并通过https://github.com/mariusmuja/flann/issues/214修复

如果在一些opencv标头之后包含flann标头,并使用g++ -std=c++11 ,那么序列化代码中就会出现一个神秘的错误。 更改包含顺序可解决此问题(在所有opencv标头之前包含flann标头)。 #define USE_UNORDERED_MAP 1 ++ 11的情况下,似乎opencv标头泄漏#define USE_UNORDERED_MAP 1 然后由原始flann库中的lsh_table.h中的#if拾取。

解决方案是在OpenCV之前加入flann。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM