私はプログラミングと C++ が初めてで、この問題に遭遇したようです。
さまざまなセンサー オフセットを含む構成ファイルを作成し、boost::serialization ロードを使用して他のクラスで読み取ることができる xml として保存しています。
すべてのセンサーには同じ種類のオフセットがあるため、オフセット定義を含む汎用構造体を作成したいと考えています。シリアル化と保存/読み込みを汎用スタクトに保持し、必要な場合にのみ別の構造体でインスタンス化したいと思います。
各センサーには独自の構造体があるため、他のクラスは必要なセンサー構造体のみを使用する必要があります。
もともと、各センサー構造体にシリアル化/保存/ロードがあり、正常に機能しました。しかし、これをジェネリック構造体に移動した後、それを呼び出すことができないようです。
コードは次のとおりです。
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
誰かが私が間違っていることを手伝ってくれますか? 構造体からシリアライズ/保存要素を使用する方法と、個々の構造体のためにそれを保存する方法は?