I'm trying to serialize a class with a non-default constructor and static const data members, so
I have to override boost::serialization::save_construct_data() and load_construct_data(). I am
getting a linking error:the static members referred to in save_construct_data() cannot be found
("undefined reference").
#include <boost/archive/tmpdir.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
// forward declarations
class A;
namespace boost { namespace serialization {
template<class Archive>
inline void save_construct_data(Archive &ar, const A *t, const unsigned int file_version);
} }
class A {
friend class boost::serialization::access;
// friend function (omitting load_construct_data() for brevity)
template<class Archive>
friend void save_construct_data(Archive &ar, const A *t, const unsigned int file_version);
public:
static const int var1 = 1;
static const int var2 = 2;
template<class Archive>
void serialize(Archive & ar, const unsigned int file_version)
{
// do nothing
};
}
// overridden Boost function
namespace boost { namespace serialization {
template<class Archive>
inline void save_construct_data(
Archive &ar, const A *t, const unsigned int file_version)
{
// link errors happen at both of these two lines ("undefined reference" of var1, var2).
ar << boost::serialization::make_nvp("var1", ::A::var1);
ar << boost::serialization::make_nvp("var2", t->var2);
};
}} // namespace…
This puzzles me since I thought that static members have external linkage. This question seems
to be more about namespaces than it is about Boost::Serialization, but I post here because
some Serialization user must have run into it.
Thanks,
Kurt