代码之家  ›  专栏  ›  技术社区  ›  Faheem

C++ BOOST PTRYMAP串行化错误

  •  2
  • Faheem  · 技术社区  · 17 年前

    我有一些代码要构建。代码使用boost::ptr_映射类来序列化某些对象。我有带boost1.38的Visual Studio 2008,编译器出现以下错误。我想知道还有没有人见过这样的东西。

    c239:“serialize”:不是“boost::ptr\u map”的成员

    看起来缺少一些引用,我想知道它是什么,我没有看到任何boost/serialization/ptr_映射。我在谷歌上搜索了很多东西,没有任何东西证明是可行的。我创建了一个示例代码,它在下面生成相同的错误

    #include <fstream>
    #include <iostream>
    
    
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <boost/config.hpp>
    
    #include <boost/shared_ptr.hpp>
    #include <boost/ptr_container/ptr_map.hpp>
    
    #include <boost/serialization/string.hpp>
    #include <boost/serialization/version.hpp>
    #include <boost/serialization/split_member.hpp>
    
    using namespace std;
    
    class User
    {
        boost::ptr_map<std::string, string> ptrmap;
    
    public:
    
        friend class boost::serialization::access;
    
        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            ar & ptrmap;
        }
    
        bool save(const std::string& filename)
        {
            ofstream ofs(filename.c_str());
    
            if(ofs.good() == false)
            {
                return false;
            }
    
            try
            {
                boost::archive::text_oarchive oa(ofs);
                oa << (*this);
            }
            catch(...)
            {
                throw;
            }
    
            return true;
        }
    };
    
    
    int main()
    {
        User user;
        user.save("C:\\test.db");
        return EXIT_SUCCESS;
    }
    

    感谢您的帮助。

    2 回复  |  直到 17 年前
        1
  •  2
  •   Greg Rogers    17 年前

    看起来有一个 boost/ptr_container/serialize_ptr_map.hpp ,这可能对包括很重要。

        2
  •  0
  •   Macke    17 年前

    也许没有对boost::ptr_映射的序列化支持?伦敦银行同业拆借利率并没有完全以这种方式连接起来。尝试在Boost邮件列表中询问。

    然而,编写一个函数来序列化ptr_映射应该非常容易。