1

シリアル化プロセス中に「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;
}

私が遭遇したエラーは次のとおりです。

このエラーは「保存」でのみ発生し、「読み込み」では発生しません

なぜこのエラーが発生するのだろうか。Boost.Serialization がこれら 2 つの異なる動作をするようにする方法を知りたいです。Boost Library 1.47.0を使用しています

4

1 に答える 1

2

saveconst関数であり、他の関数のみを呼び出すことができconstます。GetValそうではありません。それを変更:

std::string GetVal() const { ... }
于 2011-08-24T07:34:20.240 に答える