Boost.Serialization:序列化过程中调用类方法时出错

时间:2011-08-24 05:50:36

标签: c++ boost boost-serialization

当我尝试在序列化过程中调用“TestSerialize”类中的方法时,我遇到以下问题。

这是我的代码:

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;
}

我遇到的错误是: 'TestSerialize :: GetVal':无法将'this'指针从'const TestSerialize'转换为'TestSerialize&amp;'

此错误仅发生在“保存”而不是“加载”

我想知道为什么我会收到这个错误。我想知道Boost.Serialization做了什么,以便我们有这两种不同的行为。 我使用Boost Library 1.47.0

1 个答案:

答案 0 :(得分:2)

saveconst函数,只能调用其他const函数。 GetVal不是。改变它:

std::string GetVal() const { ... }