Boost logo

Boost Users :

From: Jan Boehme (jan.boehme_at_[hidden])
Date: 2006-11-28 15:11:38


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 <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/utility.hpp>

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::serialize<boost::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_at_archive@boost@@@CSerTest@@AAEXAAVxml_oarchive_at_archive@boost@@
I_at_Z) referenced in function "public: static void
__cdeclboost::serialization::access::serialize<class
boost::archive::xml_oarchive,class CSerTest>(class
boost::archive::xml_oarchive &,class CSerTest &,unsigned int)"(??$serialize@
Vxml_oarchive_at_archive@boost@@VCSerTest@@@access_at_serialization@boost@@
SAXAAVxml_oarchive_at_archive@2_at_AAVCSerTest@@I_at_Z)mytest.exe
: fatal error LNK1120: 1 unresolved externals


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