Hi,
I want to use a non inline serialize method of a class. When
instantiating it not explicitly the linker quits with undefined symbols.
So I tried to instantiate it that way and it does not work anyway.
Here is my code. Does anyone see what I've done wrong?
I did also try to use export.hpp but it doesn't help too.
Thank you very much, Jan.
// Class.hpp
#include
#include
#include
#include
#include
class CSerTest
{
std::string a_, b_, c_;
friend class boost::serialization::access;
template<class Archive> void serialize( Archive & ar, const unsigned
int );
public:
CSerTest();
};
BOOST_CLASS_VERSION(CSerTest, 1);
// Class.cpp
#include "Class.hpp"
CSerTest::CSerTest() : a_("1"), b_("2"), c_("3")
{
}
template<class Archive> void CSerTest::serialize( Archive & ar, const
unsigned int )
{
ar & BOOST_SERIALIZATION_NVP(a_) & BOOST_SERIALIZATION_NVP(b_) &
BOOST_SERIALIZATION_NVP(c_);
}
// main.cpp
#include <fstream>
#include "Class.hpp"
///////////////////////// without effect
////////////////////////////////////
template void
CSerTest::serializeboost::archive::xml_oarchive(boost::archive::xml_oarchive&,
unsigned int );
int main()
{
CSerTest instance;
std::ofstream ofs( "out_file.txt" );
boost::archive::xml_oarchive oxa( ofs );
oxa << BOOST_SERIALIZATION_NVP(instance);
}
The linker (MS version 8) returns with:
---
Creating library mytest.lib and object mytest.exp
Main.obj : error LNK2019: unresolved external symbol "private: void
__thiscall CSerTest::serialize<class boost::archive::xml_oarchive>(class
boost::archive::xml_oarchive &,unsigned int)"(??$serialize@
Vxml_oarchive@archive@boost@@@CSerTest@@AAEXAAVxml_oarchive@archive@boost@@
I@Z) referenced in function "public: static void
__cdeclboost::serialization::access::serialize(class
boost::archive::xml_oarchive &,class CSerTest &,unsigned int)"(??$serialize@
Vxml_oarchive@archive@boost@@VCSerTest@@@access@serialization@boost@@
SAXAAVxml_oarchive@archive@2@AAVCSerTest@@I@Z)mytest.exe
: fatal error LNK1120: 1 unresolved externals