2

ここで説明されているように、OpenCV Mat 形式のシリアル化を実装しました: Serializing OpenCV Mat_<Vec3f>

cv::Mat への共有ポインターをシリアル化する問題が発生しました。次のエラーが発生します。

/usr/include/boost/serialization/shared_ptr.hpp: In function ‘void boost::serialization::serialize(Archive&, boost::shared_ptr<U>&, unsigned int) [with Archive = boost::archive::text_iarchive, T = boost::shared_ptr<cv::Mat>]’: /usr/include/boost/serialization/serialization.hpp:128:9:

'void >boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = >boost::archive::text_iarchive, T = boost::shared_ptr >]' /usr/include/boost/archive からインスタンス化/detail/iserializer.hpp:188:5:

'void >boost::archive::detail::iserializer::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) からインスタンス化された const [with Archive = boost::archive::text_iarchive, T = boost::shared_ptr >]' registration2d3d.cpp:227:1: ここからインスタンス化

/usr/include/boost/serialization/shared_ptr.hpp:167:5: エラー: 静的アサーションが失敗しました: "boost::serialization::tracking_level< T >::value != boost::serialization::track_never"`

BOOST_CLASS_TRACKING を使用しようとしましたが、機能しませんでした。実際、私は問題が何であるかをよく理解していません。ブーストのドキュメントを読んでも、この問題の解決には役立ちませんでした。

4

1 に答える 1

0

指しているオブジェクトにvtableがない限り、shared_ptrを介してシリアル化できないと思います。オブジェクトのデストラクタを仮想にしてみてください。

編集: または、仮想デストラクタを持つオブジェクトでオブジェクト (OpenCV マトリックス?) をラップします。

于 2013-02-06T03:39:10.143 に答える