使用在struct中声明的boost :: serialize到另一个struct中

时间:2012-04-12 04:19:26

标签: c++ serialization boost struct

我是编程和C ++的新手,似乎遇到了这个问题。

我正在创建一个包含各种传感器偏移的配置文件,并将其存储为xml,可以使用boost :: serialization load从其他类读取。

由于所有传感器具有相同类型的偏移量,我想制作具有偏移定义的通用结构。我想保留序列化并保存/加载在通用stuct中,并且只在需要时才在不同的struct中实例化。

每个传感器都有自己的结构,因此其他类只需要使用它们需要的传感器结构。

最初,我在每个传感器结构中都有序列化/保存/加载,并且它工作正常。但是在将其转换为通用结构后,我似乎无法调用它。

代码是:

10 #pragma once
 11 #ifndef OFFSET_CONFIG_H
 12 #define OFFSET_CONFIG_H
 13 
 14 #include <boost/archive/xml_oarchive.hpp>
 15 #include <boost/archive/xml_iarchive.hpp>
 16 #include <boost/serialization/nvp.hpp>
 17 #include <fstream>
 18 #include <string>
 19 
 20 typedef struct Offset
 21 {
 22     std::string name;            // Offsets type.
 23     double offsetX;
 24     double offsetY;
 25     double offsetZ;
 26     double roll;
 27     double pitch;
 28     double yaw;
 29 
 30     template<class Archive>
 31     void serialize(Archive & ar, const unsigned int version)
 32     {
 33         using boost::serialization::make_nvp;
 34         ar & make_nvp("offsetType", name);
 35         ar & make_nvp("OffsetX", offsetX);
 36         ar & make_nvp("OffsetY", offsetY);
 37         ar & make_nvp("OffsetZ", offsetZ);
 38         ar & make_nvp("Roll", roll);
 39         ar & make_nvp("Pitch", pitch);
 40         ar & make_nvp("Yaw", yaw);
 41     }
 42 
 43     void save(const std::string& filename)
 44     {
 45         std::fstream ofs(filename.c_str(), std::fstream::trunc | std::fstream::out);
 46         boost::archive::xml_oarchive xml(ofs);
 47         xml << boost::serialization::make_nvp("temp", *this);
 48     }
 49 
 50 };
 51  
 70 struct LaserOffset
 71 {
 72   Offset laser;
 90   laser.serialize(Archive & ar, const unsigned int version);
 91   //laser.save(const std::string& filename);
 98 };

168 #endif

目前正在抛出的错误是:

OffsetConfig.h:90: error: ISO C++ forbids declaration of ‘laser’ with no type 

OffsetConfig.h:90: error: expected ‘;’ before ‘.’ token

任何人都可以帮我解决我做错的事吗?以及如何使用结构中的序列化/保存元素,以及如何为单个结构保存它?

1 个答案:

答案 0 :(得分:0)

正如Matthias所说,在你的代码片段中,

 typedef struct Offset {};

应该写成,

struct Offset {};     

因为在c ++中你可以按Offset _offset;定义一个struct对象,而在c中你应该使用struct Offset _offset;。所以你想使用typedef struct Offset{} Offset;

通常, ISO C ++禁止声明your_var没有类型意味着gcc无法找到your_var的声明。当它发生时,您应该检查包含文件,your_var的定义和命名空间,这通常会导致此错误。

BTW,#pargma once#ifndef ... #define ...做同样的事情。