c++ - 使用 boost :serialization in c++? 时如何解决 "sizeof"错误

标签 c++ linux boost-serialization

我正在使用 boost::serialization,下面是我的类,我试图在主函数中序列化这个类对象。

#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>
#include <map>
#include <sstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/access.hpp>
#include <boost/static_assert.hpp>

using namespace boost;
using namespace std;

class gps_position
{
        public:
        int i ;
        int j;
        friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive &ar, const unsigned int version)
        {
                ar & i;
                ar & j;
        }

        gps_position(){};
        gps_position(int a, int b):i(a), j(b){};
};

int main()
{
        std::stringstream ss;
         boost::archive::text_oarchive ar( ss );
         gps_position obj(10, 20);
         ar << obj;
        return 0;
}

但是我遇到了以下编译错误:

/usr/include/boost/archive/detail/oserializer.hpp: In function 'void boost::archive::save(Archive&, T&) [with Archive = boost::archive::text_oarchive, T = gps_position]':
/usr/include/boost/archive/basic_text_oarchive.hpp:78:   instantiated from 'void boost::archive::basic_text_oarchive<Archive>::save_override(T&, int) [with T = gps_position, Archive = boost::archive::text_oarchive]'
/usr/include/boost/archive/detail/interface_oarchive.hpp:78:   instantiated from 'Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = gps_position, Archive = boost::archive::text_oarchive]'
client.cpp:70:   instantiated from here
/usr/include/boost/archive/detail/oserializer.hpp:567: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>'

以下是我系统上安装的 boost 库:

boost-debuginfo-1.33.1-15.1.el5
boost-debuginfo-1.33.1-15.1.el5
boost-devel-1.33.1-15.1.el5
boost-1.33.1-15.1.el5
boost-1.33.1-15.1.el5
boost-doc-1.33.1-15.1.el5
boost-devel-1.33.1-15.1.el5 

有解决这些编译错误的建议吗?

最佳答案

尝试声明

const gps_position obj(10, 20);

按照建议here ;

boost 版本 1.33 太旧了,我认为我们中的任何人都不会轻易复制。

关于c++ - 使用 boost :serialization in c++? 时如何解决 "sizeof"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472622/

相关文章:

c++ - SDL - 窗口不显示任何内容

c++ - std::vector 应该尊重 alignof(value_type) 吗?

c++ - boost::serialization - 是否有一种可移植的方式来二进制序列化 std::wstrings?

c++ - boost 序列化保存到多种存档类型并防止在使用指针加载时构建新对象

c++ - boost::serialization::traits 的具体示例?

c++ - Singleton 类,其构造函数需要参数

c++ - 为什么在使用模板时会出现 "unresolved external symbol"错误?

java - 首选项系统尝试在 "normal"用户在 Linux 上没有写入权限的位置写入锁定文件

php - ZipArchive::close():无法在 AWS EC2 Linux 中创建临时文件

c++ - 帮助解决这个编译错误