C++ 推进向量序列化,在发布版本中崩溃

C++ 推进向量序列化,在发布版本中崩溃,c++,serialization,boost,boost-serialization,C++,Serialization,Boost,Boost Serialization,我正在尝试基本的Boost序列化示例。在尝试传递向量时,我遇到了以下代码的问题: #include <iostream> #include <vector> #include <fstream> #include <sstream> #include <queue> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarch

我正在尝试基本的Boost序列化示例。在尝试传递向量时,我遇到了以下代码的问题:

#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <queue>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/vector.hpp>

using namespace std;
stringstream ss (stringstream::in | stringstream::out);

void save()
{
  boost::archive::text_oarchive oa(ss);

  vector<int> v;
  v.push_back( 228 );
  v.push_back( 322 );

  oa << BOOST_SERIALIZATION_NVP(v);
}

void load()
{
  boost::archive::text_iarchive ia(ss);
  vector<int> tV;
  ia >> BOOST_SERIALIZATION_NVP(tV) ;
  std::cout << "Hello" << std::endl ;
}

int main()
{    
    save();
    load();

   return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
stringstream ss(stringstream::in | stringstream::out);
作废保存()
{
boost::archive::text\u oarchive oa(ss);
向量v;
v、 推回(228);
v、 推回(322);
oa>BOOST\U序列化\U NVP(电视);

我猜您在发布模式中遇到了ODR冲突


请确保您使用与构建
序列化
库时使用的宏完全相同的宏来构建程序。尤其要注意
\u SECURE\u SCL
宏。

boost::serialization是否配备了只处理类似std::vector的功能?您应该在保存和加载时使用boost\u serialization\u NVP,并使用相同的变量名。@EvgenyPanasyuk谢谢。我添加了这个(并编辑了我的帖子),但仍然是相同的崩溃。你说的具有相同变量名的
是什么意思?就像@EvgenyPanasyuk所说的-当使用BOOST\u SERIALIZATION\u NVP时,两个变量应该具有相同的名称(将
tV
更改为
v
)。该宏使用BOOST_PP_STRINGIZE将变量名称转换为稍后用于XML标记命名的字符串。但您使用的是此处的
text_archive
,因此您可以删除这两个函数中的BOOST_SERIALIZATION_NVP。Wiw,它在MSVC10、Win7、BOOST 1.53下正常工作。(但您误用了BOOST_SERIALIZATION_NVP,如前所述。)
void save()
{
  boost::archive::text_oarchive oa(ss);

  vector<int> v;
  v.push_back( 228 );
  v.push_back( 322 );

  oa << v;
}

void load()
{
  boost::archive::text_iarchive ia(ss);
  vector<int> ;
  ia >> v ;
  std::cout << "Hello" << std::endl ;
}