2012-04-12 10 views
0

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?

+0

Forgot to add, Aufruf serialize führt auch zum Fehler "struct LaserOffset 'hat kein Mitglied' serialize ' –

+1

Sie brauchen' typedef struct' in C++ nicht, einfach 'struct' genügt. – mavam

Antwort

0

Als Matthias sagte, in Ihrem Code Schnipsel,

typedef struct Offset {}; 

sollte wie geschrieben werden,

struct Offset {};  

Ursache in C++ Sie eine Struktur Objekt durch Offset _offset; definieren kann, während in c sollten Sie struct Offset _offset;. So würden Sie typedef struct Offset{} Offset;

Im Allgemeinen verwenden möchten, ISO C++ Erklärung your_var ohne Typ verbietet bedeutet gcc nicht die Deklaration von your_var finden. Wenn es passiert, sollten Sie die Include-Datei, die Definition von your_var und den Namespace überprüfen, die normalerweise diesen Fehler verursachen.

BTW, #pargma once und #ifndef ... #define ... das gleiche tun.

Verwandte Themen