|
Boost Users : |
From: Robert Ramey (ramey_at_[hidden])
Date: 2006-09-07 11:56:53
its seems that 'GUIWidget has a private constructor. When serialization
tries to construct a MyClass instance while loading a pointer, things would
fail. In order to fix this you either have to make GUIWidget::GUIWidget
public or protected or use override load_construct to replace the default
construction with one that uses the factory that creates GUIWidget.
Robert Ramey
"David Pettigrew" <davidpett_at_[hidden]> wrote in message
news:36bb165a0609061750k4882b23el124327a6a567c961_at_mail.gmail.com...
I have a class that is derived from a GUI framework class and it seems like
the serialization library will attempt to serialize the parent class but I
don't own that classes code. I get an error "'GUIWidget::GUIWidget' : cannot
access private member declared in class 'GUIWidget'". I do not know why it
is looking in the parent class since I do not do anything with the
base_object. Is there a way to get around this issue? I am doing somethine
wrong?
Here is the code,
#include <boost/archive/tmpdir.hpp>
#include <boost/archive/text_wiarchive.hpp>
#include <boost/archive/text_woarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <fstream>
#include <iostream>
namespace boost
{
namespace serialization
{
class access;
}
}
class MyClass: public GUIWidget
{
public:
MyClass();
~MyClass();
private:
std::vector<LSLogEntry> m_logEntryList; // LSLogEntry has wstring
members.
friend class boost::serialization::access;
// When the class Archive corresponds to an output archive, the
// & operator is defined similar to <<. Likewise, when the class
Archive
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & m_logEntryList;
}
};
// free functions
void save(const MyClass& eftw, const char * filename)
{
std::string fullPath(boost::archive::tmpdir());
fullPath += filename;
// save the schedule
try
{
// make an archive
std::wofstream ofs(fullPath.c_str());
boost::archive::text_woarchive oa(ofs);
oa << eftw;
} catch (boost::archive::archive_exception e)
{
wcout << e.what();
}
}
void load(MyClass& eftw, const char * filename)
{
std::string fullPath(boost::archive::tmpdir());
fullPath += filename;
// Restore the data
try
{
// open the archive
std::wifstream ifs(fullPath.c_str());
boost::archive::text_wiarchive ia(ifs);
// restore from the archive
ia >> eftw;
} catch (boost::archive::archive_exception e)
{
wcout << e.what();
}
}
Thanks,
David
_______________________________________________
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