0

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

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

由于所有传感器都有相同的偏移量,我想制作一个带有偏移量定义的通用结构。我想将序列化和保存/加载保留在通用结构中,并且仅在需要时在不同的结构中实例化。

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

最初,我在每个传感器结构中都有序列化/保存/加载,它工作得很好。但是在将其移至通用结构之后,我似乎无法调用它。

代码是:

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

谁能帮我解决我做错了什么?以及如何使用结构中的序列化/保存元素以及如何将其保存为单个结构?

4

1 回答 1

0

正如马蒂亚斯所说,在你的代码片段中,

 typedef struct Offset {};

应该写成,

struct Offset {};     

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

一般来说,ISO C++ 禁止your_var无类型声明意味着 gcc 找不到your_var. 发生这种情况时,您应该检查包含文件、定义your_var和命名空间,这通常会导致此错误。

顺便说一句,#pargma once#ifndef ... #define ...同样的事情。

于 2012-04-13T05:18:57.097 回答