私はプログラミングとC++を初めて使い、この問題に遭遇したようです。structでboost :: serializeを宣言して別の構造体にする
私は様々なセンサーオフセットを持つ設定ファイルを作成し、boost :: serialization loadを使って他のクラスが読むことができるxmlとして保存しています。
すべてのセンサーに同じ種類のオフセットがあるため、オフセット定義を持つ汎用構造体を作成したいと考えています。私はシリアライズして保存/一般的な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要素を使用する方法と、個々の構造体のために保存する方法を教えてください。マティアスが言ったように、あなたのコードスニップでは、
typedef struct Offset {};
がように記述しなければならない
serializeを呼び出すと、 "struct LaserOffset 'にメンバー' serialize 'がありません。 –
C++で' typedef struct'は必要ありません。単純に 'struct'で十分です。 – mavam