2

我已经为 OpenCVs Mat 格式实现了序列化,如下所述:序列化 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 >]' recognition2d3d.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,但无法正常工作。其实我真的不明白问题是什么,阅读boost文档无助于解决这个问题。

4

1 回答 1

0

我认为除非指向的对象具有 vtable,否则您不能通过 shared_ptr 进行序列化。尝试将对象的析构函数设为虚拟。

编辑:或者,将对象(OpenCV 矩阵?)包装在具有虚拟析构函数的对象中。

于 2013-02-06T03:39:10.143 回答