我是編程和C++的新手,似乎遇到了這個問題。使用boost :: serialize在struct中聲明到另一個struct
我正在用各種傳感器偏移量創建配置文件,並將其存儲爲xml,可以使用boost :: serialization load將其存儲爲其他類。因爲所有的傳感器都有相同類型的偏移量,我想用偏移量定義來創建一個通用結構。我想保持序列化和保存/加載到通用stuct中,並且只在需要時纔在不同的結構中實例化。
每個傳感器都有自己的結構,所以其他類只需要使用他們需要的傳感器結構。
最初,我在每個傳感器結構中有serialize/save/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
誰能幫助我與我究竟做錯了什麼?以及如何使用結構中的serialise/save元素,以及如何將其保存爲單個結構?
忘記添加,調用serialize也會導致錯誤「struct LaserOffset'沒有成員'serialize' – 2012-04-12 04:40:45
您不需要在C++中使用'typedef struct',只需'struct'就足夠了。 – mavam 2012-04-12 04:51:16