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

发布于 2024-12-01 03:22:13 字数 1269 浏览 0 评论 0原文

当我尝试在序列化过程中调用“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 &”

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

我想知道为什么会出现此错误。我想知道 Boost.Serialization 做了什么才能让我们有这两种不同的行为。 我使用Boost库1.47.0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滥情空心 2024-12-08 03:22:13

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

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

save is a const function and can only call other const functions. GetVal isn't. Change it:

std::string GetVal() const { ... }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文