ブーストでユーザー定義のプリミティブ型クラスをシリアル化する方法を説明する次のサンプル コードをテストしようとしていますが、正常に動作します。コンパイルに失敗し、修正に苦労しています(vc++2008でテスト中)。
すべてのコードは、次の 3 つのリンクにあります。http://www.boost.org/doc/libs/1_46_1/libs/serialization/test/test_primitive.cpp http://www.boost.org/doc/libs /1_46_1/libs/serialization/test/test_tools.hppおよび libs/1_46_1/libs/serialization/test/text_archive.hpp
エラーを取得するには、次のように text_archive.hpp のヘッダーと typedef をポリモーフィックなものに変更してください。
#include <boost/archive/polymorphic_text_oarchive.hpp>
typedef boost::archive::polymorphic_text_oarchive test_oarchive;
#include <boost/archive/polymorphic_text_iarchive.hpp>
typedef boost::archive::polymorphic_text_iarchive test_iarchive;
使用されるプリプロセッサ フラグ:
BOOST_ALL_DYN_LINK;BOOST_FILESYSTEM_NO_DEPRECATED;BOOST_FILESYSTEM_VERSION=3
エラーメッセージ:
------ ビルド開始: プロジェクト: TestSer4、構成: Win32 のデバッグ ------
コンパイル中...
test_primitive.cpp
c:\program files\boost\boost_1_46_1\boost\archive\detail\oserializer.hpp( 88) : エラー C2664: 'void boost::archive::polymorphic_oarchive_impl::save(const bool)' :
パラメーター 1 を 'const A' から 'const bool'
に変換できません これを実行できるユーザー定義変換演算子はありませんc:\program files\boost\ boost_1_46_1 \boost\archive\detail\
oserializer.hpp
(232) : 関数テンプレートのインスタンス化への参照を参照してください 'void boost::archive::save_access::save_primitive(アーカイブ &,const T &)' [でコンパイル
されている
Archive=boost::archive::polymorphic_oarchive,
T=A
]
c:\program files\boost\boost_1_46_1\boost\archive\detail\oserializer.hpp(308) : 関数テンプレートのインスタンス化への参照を参照 'void boost::archive: :detail::save_non_pointer_type::save_primitive::invoke(Archive &,const T &)' は [ Archive=boost::archive::polymorphic_oarchive, T=A ] c:\program files\boost\boost_1_46_1\boost\ で
コンパイル
さ
れ
て
い
ますarchive\detail\oserializer.hpp(525) : 関数テンプレートのインスタンス化への参照 'void boost::archive::detail::save_non_pointer_type::invoke(Archive &,const T &)' で
コンパイル
[
Archive=boost::archive::polymorphic_oarchive,
T=A
]
c:\program files\boost\boost_1_46_1\boost\archive\polymorphic_oarchive.hpp(122) : 関数テンプレートのインスタンス化への参照を参照 'void boost::archive:: save(Archive &,T &)' は [ Archive=boost::archive::polymorphic_oarchive, T=A ] c:\program files\boost\boost_1_46_1\boost\archive\detail\interface_oarchive.hpp(63)でコンパイル
されています:関数テンプレートのインスタンス化 'void boost::archive::polymorphic_oarchive_impl::save_override(const boost::serialization::nvp &,int)' でコンパイルされている参照を参照して ください
[
T=A
]
c:\program files\boost\boost_1_46_1 \boost\archive\detail\polymorphic_oarchive_route.hpp(171) : 関数テンプレートのインスタンス化への参照を参照 'Archive &boost::archive::detail::interface_oarchive::operator < <(T &)' は [ Archive=boost::archive::polymorphic_oarchive, T=const boost::serialization::nvp ] c:\apps\proj\serilization\testser4\testser4\test_primitive.cpp(73) で
コンパイル
さ
れ
て
い
ます: 関数テンプレートのインスタンス化への参照 'boost::archive::polymorphic_oarchive &boost::archive::detail::polymorphic_oarchive_route::operator <<>(const boost::serialization::nvp &)'コンパイル中
with
[
ArchiveImplementation=boost::archive::text_oarchive_impl,
T=A
]
ビルド ログが「file://C:\apps\proj\Serilization\BusSchedEx\BusSchedEx\Debug\BuildLog.htm」に保存されました
TestSer4 - 1 エラー( s)、0 警告
========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ==========
助けてください。