2011-05-16 82 views
5

当我试图通过文本存档反序列化一些以前用升级版本序列化的数据(1.46到serialize和1.38到反序列化)时,Iv'e得到了这个异常......是有一种方法降级(在代码中)的序列化?像“set_library_version”的东西?谢谢...Boost序列化:存档“不支持的版本”异常

回答

4

请参阅Error read binary archive, created by old boost version邮件归档关于序列化错误。

它说,下面的代码做这项工作

void load_override(version_type & t, int version){ 
     library_version_type lvt = this->get_library_version(); 
     if(boost::archive::library_version_type(7) < lvt){ 
      this->detail_common_iarchive::load_override(t, version); 
     } 
     else 
     if(boost::archive::library_version_type(6) < lvt){ 
      uint_least16_t x=0; 
      * this->This() >> x; 
      t = boost::archive::version_type(x); 
     } 
     else 
     if(boost::archive::library_version_type(3) == lvt || boost::archive::library_version_type(5) == lvt){ 
#pragma message("CTMS fix for serialization bug (lack of backwards compatability) introduced by boost 1.45.") 
      // upto 255 versions 
      unsigned char x=0; 
      * this->This() >> x; 
      t = version_type(x); 
     } 
     else{ 
      unsigned int x=0; 
      * this->This() >> x; 
      t = boost::archive::version_type(x); 
     } 
    } 
+0

首先,感谢您的回复......但实际上我不使用加载/保存功能,而是叫连载独特的功能.. 。就像boost序列化的例子...我该怎么办? – marco 2011-05-16 13:02:28

+0

链接说到这一点。它说向后兼容性被破坏“在1.44之前,归档版本被写为”一个字节“,从1.44归档版本类型开始,从'version_type'变为'library_version_type',预计会被读为两个字节。仔细链接并使用我粘贴的代码重新编译。我认为这是唯一的解决方案。 – 2011-05-16 13:29:24