港口项目VS2003 - > VS2013错误C2039 serialize不是hash_Map的成员

时间:2014-11-17 22:27:26

标签: c++ boost visual-studio-2013 visual-studio-2003

试图将我公司的一些软件从visual studio 2003更新到2013.我们使用了很多必须从不同位置移植的库,但在处理了所有的boost复制并将其添加到C ++之后目录,我仍然得到以下错误。

  

错误C2039“'serialize':不是'stdext :: hash_map Key,Data,Hash_Traits,std :: allocator>'

的成员

在boost / serialization中的access.hpp中发生此错误。

由于知识产权问题,我实际上无法包含任何代码,但我们将非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

您应该通过实现自定义点使您的容器类可序列化。

我假设你升级到std::unordered_map(因为你应该),然后你可以按照我在这里写的代码:C++ Boost.Serialization error for hash_map with custom objects as key

  

注意我为std::unordered_map定义了序列化,因此您不再需要使用已弃用的GNU / MSVC库扩展。 (另请参阅此 bug-report/patch

#include <unordered_map>
#include <boost/serialization/collections_save_imp.hpp>
#include <boost/serialization/collections_load_imp.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/split_free.hpp>

namespace boost { namespace serialization {

    template<class Archive, typename... TArgs >
        inline void save(Archive & ar, std::unordered_map<TArgs...> const&t, unsigned) {
            boost::serialization::stl::save_collection<Archive, std::unordered_map<TArgs...> >(ar, t);
        }

    template<class Archive, typename... TArgs >
        inline void load(Archive & ar, std::unordered_map<TArgs...> &t, unsigned) {
            boost::serialization::stl::load_collection<Archive,
                std::unordered_map<TArgs...>,
                boost::serialization::stl::archive_input_map<
                    Archive, std::unordered_map<TArgs...> >,
                boost::serialization::stl::no_reserve_imp<std::unordered_map<TArgs...> >
                    >(ar, t);
        }

    // split non-intrusive serialization function member into separate
    // non intrusive save/load member functions
    template <class Archive, typename... TArgs>
        inline void serialize(Archive & ar, std::unordered_map<TArgs...> &t, unsigned file_version) {
            boost::serialization::split_free(ar, t, file_version);
        }
} }