Polymorphic serialization compile error.

I'm trying to compile (with VS 2005) a simple example of serialization (boost 1.34) of a polymorphic class, but I get the following compile error: basic_xml_oarchive.hpp(83) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' 1> with 1> [ 1> x=false 1> ] Can you help me? I've read the documentation and I didn't understand the difference with the example that I found in there. Here is the source: ----------------------------------------------------------------- //main.cpp #include <iostream> #include <fstream> #include "boost/archive/xml_oarchive.hpp" #include "boost/archive/xml_iarchive.hpp" #include <boost/serialization/base_object.hpp> #include <boost/serialization/is_abstract.hpp> #include <boost/serialization/utility.hpp> class base { public: base(): _a(0) { } base(double a): _a(a) { } virtual double f() = 0; protected: double _a; //Serialitation procedure. friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & boost::serialization::make_nvp("a", _a); } }; BOOST_IS_ABSTRACT(base) class derived: public base { public: derived(): base(0), _b(0) { } derived(double b): base(1), _b(b) { } double f() { return _a + _b; } protected: double _b; //Serialitation procedure. friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & boost::serialization::base_object<base>(*this); ar & boost::serialization::make_nvp("b", _b); } }; int main() { derived dc(5); { std::ofstream ofile("test.xml"); boost::archive::xml_oarchive oa(ofile); oa << boost::serialization::make_nvp("test", dc); } return 0; } -----------------------------------------------------------------

Try the following. See the "rationale" in the documentation for an explanation. Robert Ramey ... int main() { const derived dc(5); // try adding "const" here { std::ofstream ofile("test.xml"); boost::archive::xml_oarchive oa(ofile); oa << boost::serialization::make_nvp("test", dc); } return 0;
participants (2)
-
mik
-
Robert Ramey