|
Boost Users : |
From: Fred Lupien (fred.lupien_at_[hidden])
Date: 2007-09-30 16:57:38
Honestly I have been looking for a solution for hours before I made this
post. I am not so familiar with boost, the only module I use is
serialization so maybe my error is obvious but I went through all the doc on
boost.org without luck.
I should have been more descriptive I my first post. I does not work because
I get unresolved externals on the base class save / load functions when I
implement the derived class save/load functions. I am using the intrusive
version of serialization so their should be no particular namespace
requirement. Here is a simplified example of my problem:
///////////////////////////////////// A.h
Class A:
{
friend class boost::serialization::access;
template<class Archive>
void save(Archive & ar, const unsigned int version) const;
template<class Archive>
void load(Archive & ar, const unsigned int version);
BOOST_SERIALIZATION_SPLIT_MEMBER()
};
/////////////////////////////////////
///////////////////////////////////// B.h
class B: public A
{
friend class boost::serialization::access;
template<class Archive>
void save(Archive & ar, const unsigned int version) const;
template<class Archive>
void load(Archive & ar, const unsigned int file_version );
BOOST_SERIALIZATION_SPLIT_MEMBER()
}
BOOST_CLASS_EXPORT_GUID(B, "B")
/////////////////////////////////////
///////////////////////////////////// A.cpp
template<class Archive>
void A::save(Archive & ar, const unsigned int version) const
{
ar & var1;
}
template<class Archive>
void A::load(Archive & ar, const unsigned int file_version )
{
ar & var;
somestuff();
}
/////////////////////////////////////
///////////////////////////////////// B.cpp
template<class Archive>
void B::save(Archive & ar, const unsigned int version) const
{
ar & boost::serialization::base_object<A>(*this);
ar & var2;
}
template<class Archive>
void B::load(Archive & ar, const unsigned int file_version )
{
ar & boost::serialization::base_object<A>(*this);
ar & var2;
morestuff();
}
/////////////////////////////////////
If I don't put the two implementation of serialization of A and B in the
same file I get this error:
error LNK2019: unresolved external symbol "public: void __thiscall
A::save<class boost::archive::text_oarchive> ...
error LNK2019: unresolved external symbol "public: void __thiscall
A::load<class boost::archive::text_iarchive> ...
Feel free to redirect me to some more documentation, I read most of
boost.org serialization section but maybe their are other places to look at.
I am also having problem figuring out the when to use BOOST_CLASS_EXPORT vs
BOOST_CLASS_EXPORT_GUID vs ar.register_types.
Thank you for your help.
On 9/30/07, Robert Ramey <ramey_at_[hidden]> wrote:
>
> A easy way to fix this would be to put the serialization code in the
> source file instead of the header file but I can't get this to work...
>
> There is no reason why this shouldn't work. Invest some effort figuring
> out why it won't link. Check namespaces.
>
> Robert Ramey
>
> "Fred Lupien" <fred.lupien_at_[hidden]> wrote in message
> news:32e6d6bf0709300738u77850377t2bf40ec5501b882f_at_mail.gmail.com...
> Hi,
>
> I am using the boost serialization library in a personal project and
> ran into a recursive include problem. Class A serialize an object of class B
> and class B also serialize an object of class A. So class A must be a
> complete type in class B and class B must be a complete type in class A,
> hence the recursive include problem. I always end up with unresolved
> externals if the body of my serialization functions are not within the
> header file. Any way around this beside switching to non-intrusive
> serialization?
>
> thanx!
>
> --
> Frédérick Martel-Lupien
> Étudiant en Génie Informatique
> Université de Sherbrooke
> fred.lupien_at_[hidden]
>
> ------------------------------
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
-- Frédérick Martel-Lupien Étudiant en Génie Informatique Université de Sherbrooke fred.lupien_at_[hidden]
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net