Hello,
I'm having an issue with serializing derived classes from a base class
pointer. I think I've narrowed it down to the simplest possible code. I get
an "unregistered class" exception at runtime even though I've registered the
derived class with BOOST_CLASS_EXPORT. Here's the code:
----------------------------------------------
main.cpp:
#include
#include
#include <sstream>
#include "A.hpp"
#include "X.hpp"
int main()
{
std::stringstream ss;
const A * const test = new X;
{
boost::archive::text_oarchive oa(ss);
oa << test;
}
A *test2;
{
boost::archive::text_iarchive ia(ss);
ia >> test2;
}
return 0;
}
-----------------------------------------------
A.hpp:
#pragma once
#include
class A
{
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
ar & test;
}
int test;
public:
A() : test(0) {}
virtual ~A() {}
};
-----------------------------------------------
X.hpp:
#pragma once
#include
#include "A.hpp"
class X : public A
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
ar & boost::serialization::base_object<A>(*this);
}
};
------------------------------------------------
X.cpp:
#include "X.hpp"
#include
BOOST_CLASS_EXPORT(X)
-----------------------------------------------
As you can see, I don't have BOOST_CLASS_EXPORT in the X.hpp header. This is
the way I originally had it but then I got multiple definition link errors
when more than one class derived from A. The suggestion in the serialization
docs was to move the macro to a .cpp file.
Full output when I run this:
terminate called after throwing an instance of
'boost::archive::archive_exception'
what(): unregistered class
Aborted (core dumped)
Any help would be appreciated greatly,
Avery