Доброговремени суток всем!
Возникла такая проблема:
есть несколько класов
// include headers that implement a archive in simple text format
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
// включаем, чтобы сериализация работала с векторами
#include <boost/serialization/vector.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/shared_ptr_132.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/strong_typedef.hpp>
//#include <boost/serialization/map.hpp>
//#include <boost/serialization/variant.hpp>
// включаем, чтобы нормально проходила сериализация XML
#include <boost/serialization/nvp.hpp>
#include <map>
#include "boost/variant.hpp"
#include <boost/fusion/container/list.hpp>
#include "boost/shared_ptr.hpp"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
using namespace boost;
typedef boost::variant<unsigned int,double,wstring> SCADAVariant;
class Item;
class Set;
class Configuration;
typedef list <boost::shared_ptr<Item>> pItemList;
class Item
{
wstring fIdent; //Идентификатор строковый
public:
Item();
Item(wstring Ident);
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar,const unsigned int vertion)
{
ar & BOOST_SERIALIZATION_NVP(fIdent);
}
};
class Set : public Item
{
friend Item;
pItemList Items; //Элементы множества
public:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar,const unsigned int vertion)
{
ar & BOOST_SERIALIZATION_NVP(Items); //не сериалезует!
}
};
//Главный класс конфигурации. Обеспечивает хранение и сериализацию
template<typename TIArch, typename TOArch, typename TClass>
void TestArch(const std::string & file, int flags, const TClass & cont)
{
{ // Сериализуем
std::ofstream ofs(file.c_str(), std::ios::out|flags);
TOArch oa(ofs);
// make_nvp создаёт пару имя-значение, которая отразится в XML
// если не используем XML архив, то можно пару не создавать
oa << boost::serialization::make_nvp("Test_Object", cont);
}
TClass newg;
{ // Десериализуем
std::ifstream ifs(file.c_str(), std::ios::in|flags);
TIArch ia(ifs);
ia >> boost::serialization::make_nvp("Test_Object",newg);
}
{ // Еще раз сериализуем, чтобы потом сравнить результаты двух сериализаций
// и убедиться, что десериализациия прошла корректно
std::ofstream ofs((file+".tmp").c_str(), std::ios::out|flags);
TOArch oa(ofs);
oa << boost::serialization::make_nvp("Test_Object", cont);
}
}
class Configuration
{
friend Item;
Set root;
public:
Configuration(); //Инициализация
~Configuration();
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar,const unsigned int vertion)
{
ar & BOOST_SERIALIZATION_NVP(root);
}
};
проблема вследующем нополучается сериализовать стуктуру типа pItemList Items, она объявлена как typedef list <boost::shared_ptr<Item>>pItemList.
Посуте я пытаюсь сериализовать список умных указателей на что получаю:
Error 7 error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_iprimitive<class boost::archive::binary_iarchive,char,struct std::char_traits<char> >::load(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &)" (?load@?$basic_binary_iprimitive@Vbinary_iarchive@archive@boost@@DU?$char_traits@D@std@@@archive@boost@@IAEXAAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z) referenced in function "public: static void __cdecl boost::archive::load_access::load_primitive<class boost::archive::binary_iarchive,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > >(class boost::archive::binary_iarchive &,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &)" (??$load_primitive@Vbinary_iarchive@archive@boost@@V?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@load_access@archive@boost@@SAXAAVbinary_iarchive@12@AA
V?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z)
вот и не пойму где ошибка может кто сталкивался с подобным?