|
Boost Users : |
From: Robert Ramey (ramey_at_[hidden])
Date: 2007-08-08 11:55:44
You need to explicitly instantiate the code, see below
Robert Ramey
"Oliver Kania" <kania.oliver_at_[hidden]> wrote in message news:1262c4ee0708080648w1f58627ercaffa141de529bb8_at_mail.gmail.com...
Hello and thanks for the help I received so far.
here is my current problem:
The class I try to serialize is:
class LIBPALO_NG_CLASS_EXPORT CubeCache : public CUBE_INFO {
public:
friend class boost::serialization::access;
CubeCache();
~CubeCache();
void setSequenceNumber( unsigned int sequenceNumber ) {
m_SequenceNumber = sequenceNumber;
}
unsigned int getSequenceNumber() const {
return m_SequenceNumber;
}
private:
unsigned int m_SequenceNumber;
template<class Archive>
void serialize( Archive &ar, const unsigned int version );
};
the cpp file looks as follows:
#include "CubeCache.h"
#include <boost/serialization/base_object.hpp>
namespace jedox {
namespace palo /* palo */
{
template<class Archive>
void CubeCache::serialize( Archive &ar, const unsigned int version ) {
// save/load base class information
ar & boost::serialization::base_object<CUBE_INFO>( *this );
ar & m_SequenceNumber;
}
CubeCache::CubeCache(){;}
CubeCache::~CubeCache(){;}
}
} /* jedox */
The CUBE_INFO structure serializes just fine. There are no linkage problems with the following code:
int main( int argc, char* argv[] ) {
CUBE_iNFO* const c = new CUBE_INFO();
std::ofstream ofs("filename");
// save data to archive
{
boost::archive::text_oarchive oa( ofs );
// write class instance to archive
oa << ( c );
// archive and stream closed when destructors are called
}
return 0;
}
//////////////////// add this here - explicite instantiation
template CubeCache::serialize<boost::archive::text_oarchive>;
However, when I use CubeCache instead of CUBE_INFO in the above code, i get a linkage error:
======================================================================
libpalo_ng.obj : error LNK2019: unresolved external symbol "private: void __thiscall jedox::palo::CubeCache::serialize<class boost::archive::text_oarchive>(class boost::archive::text_oarchive &,unsigned int)" ...
======================================================================
There are no linkage problems with the library when i do not use boost::serialization. I guess this happens
when the linker tries to link with the serialization library. LIBPALO_NG_CLASS_EXPORT is defined as:
# define LIBPALO_NG_CLASS_EXPORT __declspec(dllexport)
Regards, Oliver
------------------------------------------------------------------------------
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
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