2017-01-23 2 views
0

По какой-то причине MSVC НЕ скомпилировать пример подталкивание сериализации с помощью следующего кода:увеличить сериализации MSVC 2015 не компиляции в режиме DEBUG

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

я получаю ошибку follwing:

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 *)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]) 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 &)" ([email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected]@@[email protected]@@[email protected]) cpp11_cpp14_cpp17 D:\Projects_Programing\__Testing\cpp11_cpp14_cpp17\cpp11_cpp14_cpp17\cpp11_cpp14_cpp17.obj 1 

Но когда Я скомпилировал его в режиме выпуска. Я читал, что это может произойти из-за режима MSVC STRICT, но я пробовал, и он не работает.

У кого-нибудь такая ошибка?

+0

Я составил простую структуру 'MyName', и она компилируется для меня. Пожалуйста, покажите свой класс 'MyName'. – lakeweb

+0

@lakeweb Ниже вы можете увидеть реализацию MyName: 'класса MyName { общественности: MyName (станд :: строка _name, станд :: строка _family_name) : имя {_name}, {family_name _family_name} { } частный: класс друзей boost :: serialization :: access; template <класс Архив> void serialize (Archive & ar, const unsigned int version) { ar & name; ar & family_name; } std :: string name; std :: string family_name; }; ' –

+0

Все еще компилируется в порядке. Я побежал, я думаю, что это SP3. Пакет обновления, который выходил где-то за последние полгода. Это единственное, о чем я могу думать здесь. Я использовал только два заголовка: text_oarchive.hpp и text_iarchive.hpp. Как насчет тебя? И я использую 1.62. Вы должны были бы разместить все это, это помогло бы. – lakeweb

ответ

0

Я выяснил причину этой ошибки. Это происходит, когда я пытался скомпилировать с флагом/Za (означает нулевое расширение от MSVC для C++). Когда я удалил этот флаг, мой код успешно компилируется.

@lakeweb Спасибо за помощь и поддержку!

К сожалению, я не понимаю, почему некоторые расширения из MSVC позволяют компилировать Boost, но без расширений он не компилируется. Это очень странно!

Возможно, это либо ошибка на стороне Boost, либо на стороне MSVC. Любое предположение?

+0

Привет, Денис, я догоняю. Он не был явным в документах, но потому что (https://msdn.microsoft.com/en-us/library/d9x1s805.aspx) [прагма говорит] _Pragmas являются специфичными для машины или операционной системы по определению и обычно различаются для каждого компилятора. Вероятно, что lib pragma отключен, поэтому lib не был связан. – lakeweb

Смежные вопросы