Boost logo

Boost Users :

Subject: [Boost-users] Boost.Serialization: Error on Calling Class Method during serialization process
From: Hazrat Pradipta Ranjali (mrdipta_at_[hidden])
Date: 2011-08-24 01:47:40


I have the following problem when I try to call method in "TestSerialize"
class during serialization process.

Here is my code:

class TestSerialize
{
public:
    std::string GetVal() { return Val + "abc"; }
    void SetVal(std::string tVal) { Val = tVal.substr(0, 2); }

protected:

    std::string Val;

    friend class boost::serialization::access;
    template<class Archive> void save(Archive & ar, const unsigned int
version) const
    {
        using boost::serialization::make_nvp;
        std::string tVal = GetVal(); // Error here
        ar & make_nvp("SC", tVal);
    }

    template<class Archive> void load(Archive & ar, const unsigned int
version)
    {
        using boost::serialization::make_nvp;
        std::string tVal;
        ar & make_nvp("SC", tVal);
        SetVal(tVal);
    }
    BOOST_SERIALIZATION_SPLIT_MEMBER();
};

int main()
{
    TestSerialize tS;

    std::ofstream ofs("test.xml");
    boost::archive::xml_oarchive oa(ofs, boost::archive::no_header);
    oa << BOOST_SERIALIZATION_NVP(tS);
    ofs.close();

    return 0;
}

The error that I encountered is:
'TestSerialize::GetVal' : cannot convert 'this' pointer from 'const
TestSerialize' to 'TestSerialize &'

This error only happens on "save" but not "load"

I wonder why I get this error. I would like to know what Boost.Serialization
do such that we have these two different behaviors.
I use Boost Library 1.47.0

Regards,



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