Boost序列化MSVC 2015无法在DEBUG模式下编译

时间:2017-01-23 22:29:44

标签: visual-c++ serialization boost visual-studio-2015

由于某种原因,MSVC不使用以下代码编译boost序列化示例:

class MyName
{
public:
    MyName(std::string _name, std::string _family_name)
        :name{ _name }, family_name{ _family_name }
    { }
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    { ar & name; ar & family_name; } std::string name; std::string family_name;
};

int main()
{
    // create and open a character archive for output
    std::stringstream  ofs;

    // save data to archive
    {
        MyName my_name("MyName", "FamilyName");
        boost::archive::text_oarchive oa(ofs);
        // write class instance to archive
        oa << my_name;
        // archive and stream closed when destructors are called
    }

    // save data to archive
    {
        MyName my_name("afsf", "dgsass");

        boost::archive::text_iarchive oa(ofs);
        // write class instance to archive
        oa >> my_name;
        // archive and stream closed when destructors are called
    }
    return 0;
}

我得到了以下错误:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: __thiscall boost::archive::archive_exception::archive_exception(enum boost::archive::archive_exception::exception_code,char const *,char const *)" (??0archive_exception@archive@boost@@QAE@W4exception_code@012@PBD1@Z) referenced in function "protected: void __thiscall boost::archive::basic_text_iprimitive<class std::basic_istream<char,struct std::char_traits<char> > >::load<unsigned int>(unsigned int &)" (??$load@I@?$basic_text_iprimitive@V?$basic_istream@DU?$char_traits@D@std@@@std@@@archive@boost@@IAEXAAI@Z)  cpp11_cpp14_cpp17   D:\Projects_Programing\__Testing\cpp11_cpp14_cpp17\cpp11_cpp14_cpp17\cpp11_cpp14_cpp17.obj  1   

但是当我在发布模式下编译它时。 我已经读过它可能由于MSVC STRICT模式而发生,但我已经尝试过,它也不起作用。

有人有这样的错误吗?

1 个答案:

答案 0 :(得分:0)

我已经找出了这个错误的原因。 它发生在我尝试使用flag / Za编译时(意味着从MSVC for C ++的零扩展)。 当我删除此标志时,我的代码会成功编译。

@lakeweb感谢您的帮助和支持!!

不幸的是我不明白为什么MSVC的某些扩展允许编译Boost,但没有扩展它不能编译。这很奇怪!!

可能是Boost方面或MSVC方面的错误。 任何假设?