Ich bin neu in die Programmierung und C++ und scheinen in dieses Problem zu haben, laufen.mit boost :: Serialisierung in Struktur in eine andere Struktur deklariert
Ich bin eine Konfigurationsdatei mit verschiedenem Sensor Offsets zu schaffen, und es als XML speichern, die von anderen Klassen gelesen werden kann, unter Verwendung von boost :: Serialisierung Last.
Da alle Sensoren die gleiche Art von Offset haben, möchte ich eine generische Struktur, um mit Definitionen versetzt. Ich möchte das serialize und save/load im generischen stuct behalten und nur in einer anderen Struktur bei Bedarf instanziieren.
Jeder Sensor hat seine eigene Struktur, so dass die anderen Klassen müssen nur den Sensor struct sie verwenden müssen.
Ursprünglich hatte ich die serialize/Speichern/Laden in jedem Sensor-Struktur, und es funktionierte gut. Aber nachdem ich dies auf generische Struktur umgestellt habe, scheint es mir unmöglich zu sein, es zu nennen.
Der Code ist:
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
Der Fehler es wirft derzeit ist:
OffsetConfig.h:90: error: ISO C++ forbids declaration of ‘laser’ with no type
OffsetConfig.h:90: error: expected ‘;’ before ‘.’ token
jemand mit mir helfen kann, was mache ich falsch? und wie man die serialise/save Elemente aus der Struktur benutzt und wie man sie für einzelne Strukturen speichert?
Forgot to add, Aufruf serialize führt auch zum Fehler "struct LaserOffset 'hat kein Mitglied' serialize ' –
Sie brauchen' typedef struct' in C++ nicht, einfach 'struct' genügt. – mavam