BOOST ASIO Serialisierung
-
Hallo Leute, ich habe schwierigkeiten eine Instanz der Klasse NET zu serialsieren
Die eigentliche Serialisierung funktioniert, allerding wird boost beim deserialisieren die exception "Datastream Error"
Die Deserialisierung funktioniert außerdem wenn die Klasse NET nur leere Listen enthält
Die Klasse mConnections und mConnections2 können duplikate von CONNECTIONS enthalten.Sieh jemand einen Fehler? Bin für jegliche Hilfe oder Hinweise dankbar
class NET { friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version){ar & mNeurons; ar &mConnections; ar & mConnections2;} private: std::list<NEURON*> mNeurons; std::list<CONNECTION*> mConnections; std::list<CONNECTION*> mConnections2; }; BOOST_CLASS_EXPORT(NET)class NEURON { friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version){ar & Faktor;} private: float Faktor; }; BOOST_CLASS_EXPORT(NEURON)class CONNECTION { friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version){ar & Neuron_A; ar & Neuron_B;} private: NEURON *Neuron_A; NEURON *Neuron_B; }; BOOST_CLASS_EXPORT(CONNECTION)
-
Dann schlage ich vor Du fängst mal die Exception und rufst boost::diagnostic_information(..) auf, das könnte Dir weitere Informationen liefern.
Simon
BTW: Dein Problem hat nichts mit Boost::Asio sondern mit Boost::Serialization zu tun!
-
Danke für den Hinweis auf boost::diagnostic_information(..), kannte ich noch nicht.
Allerdings wird keine boost exception geworfen sondern eine std::exception.
Ich habe mein Programm nun auf eine XML Ausgabe umgestellt, die Ausgabe sieht Fehlerfrei aus. Beim deserialisieren tritt nun die stream error exception auf. Ausserdem habe ich herausgefunden dass die exception beim deserialisieren der Klasse Connection auftritt.
Die einzige weitere Fehlerinformation ist dass das Failbit des Streams gesetzt ist.Langsam bin ich am verzweifeln.
Bin wirklich für jeden noch so vagen Hinweis dankbar.
-
Und gibts bei std::exception::what() einen brauchebaren Hinweis?
-
Danke für die Hilfe, ich habe den Fehler nun endlich gefunden. In der Klasse CONNECTION wurde eine Wert (der noch nicht in Verwendung war) nicht durch den Konstruktor initialisiert. Boost hatte scheinbar keine Probleme beim schreiben , aber konnte den unitialisierten Wert ...e^-38 nicht mehr lesen.