Dear all ,
The library version I used was boost_1_42,
and the IDE was VS2008 . When I attempt to use the BOOST_CLASS_EXPORT_KEY
macro, I met some problems. In my word, I think it doesn’t work as expected .
My project files are listed following (just five tiny files) :
// Base.h
#ifndef _BASE_H
#define _BASE_H
#include
<boost/serialization/access.hpp>
#include
<boost/serialization/export.hpp>
#include <boost/serialization/type_info_implementation.hpp>
#include
<boost/serialization/extended_type_info_no_rtti.hpp>
#include
<boost/serialization/base_object.hpp>
#include
<boost/serialization/shared_ptr.hpp>
class Base
{
public:
Base() ;
Base(int a) ;
virtual ~Base();
private:
friend class boost::serialization::access ;
template<class Archive>
void
serialize(Archive& ar, const unsigned int version)
{
ar & a_ ;
}
private:
int
a_ ;
};
BOOST_CLASS_EXPORT_KEY(Base)
BOOST_SERIALIZATION_SHARED_PTR(Base)
#endif //_BASE_H
// Base.cpp
#include
"Base.h"
Base::Base(): a_(0){ }
Base::Base( int a ):
a_(a){ }
Base::~Base(){ }
BOOST_CLASS_EXPORT_IMPLEMENT(Base)
//Derived.h
#ifndef _DERIVED_H
#define _DERIVED_H
#include "base.h"
class Derived :
public Base
{
public:
Derived();
Derived(int a, int b);
~Derived();
private:
friend class boost::serialization::access ;
template<class Archive>
void
serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::base_object<Base>(*this) ;
ar & b_ ;
}
private:
int
b_ ;
};
BOOST_CLASS_EXPORT_KEY(Derived)
BOOST_SERIALIZATION_SHARED_PTR(Derived)
#endif // _DERIVED_H
//
Drived.cpp
#include
"StdAfx.h"
#include "Derived.h"
Derived::Derived():
b_(0){ }
Derived::Derived( int a,
int b ): Base(a), b_(b){ }
Derived::~Derived(){ }
BOOST_CLASS_EXPORT_IMPLEMENT(Derived)
//
main.cpp
#include <fstream>
#include
<iostream>
#include
<boost/archive/text_oarchive.hpp>
#include
<boost/serialization/shared_ptr.hpp>
#include
"Derived.h"
int _tmain(int argc,
_TCHAR* argv[])
{
boost::shared_ptr<Base> base_ptr(new Derived(10,15)) ;
std::ofstream ofs("test.txt") ;
boost::archive::text_oarchive oa(ofs) ;
oa
<< base_ptr ;
return 0;
}
There are no errors in compile-time. But
when I executed the program, a memory error caused ! I don’t know what is wrong
about my program. Whether my usage of BOOST_CLASS_EXPORT_KEY/BOOST_CLASS_EXPORT_IMPLEMENT was
wrong ? And, how can I fix the problems ?
Thanks, and with my best wishes.
Lei