[GELÖST] Boost Serialisierung unter VC 2005 löst STATIC_ASSERTION_FAILURE aus
-
Hi!
Ich arbeite zum ersten mal mit Boost::Serialization. Dazu habe ich mir ein einfaches Test-Programm gebastelt:
class Test { friend class boost::serialization::access; public: Test(int i, double d, const std::string& t, const std::vector<std::string>& v) : _ganz(i), _fliess(d), _name(t), _vec(v) {} Test() : _ganz(23), _fliess(42.23), _name("Hallo"), _vec(4) { _vec.push_back("Hallo"); _vec.push_back("das"); _vec.push_back("ist"); _vec.push_back("Super!"); } protected: template<class Archive> void serialize(Archive& ar, const unsigned int version) const { ar & BOOST_SERIALIZATION_NVP(_vec) & BOOST_SERIALIZATION_NVP(_fliess) & BOOST_SERIALIZATION_NVP(_ganz) & BOOST_SERIALIZATION_NVP(_name); } int _ganz; double _fliess; std::string _name; std::vector<std::string> _vec; }; int main(int argc, char* argv[]) { const char* filename = "C:\\temp.xml"; { Test s(); // make an archive std::ofstream ofs(filename); assert(ofs.good()); boost::archive::xml_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(s); } { Test s(); // open the archive std::ifstream ifs(filename); assert(ifs.good()); boost::archive::xml_iarchive ia(ifs); // restore the schedule from the archive ia >> BOOST_SERIALIZATION_NVP(s); } int i = 0; std::cin >> i; return 0; }Allerdings bekomme ich bei diesem Code mit den entsprechenden Includes unter dem VC++ 2005 Compiler folgenden Fehler:
boost_1_34_1\boost/archive/detail/oserializer.hpp(315) : error C2027: Verwendung des undefinierten Typs "boost::STATIC_ASSERTION_FAILURE<x>"
with
[
x=false
]
boost_1_34_1\boost/archive/detail/oserializer.hpp(309): Bei der Kompilierung der Klassen-template der void boost::archive::detail::save_non_pointer_type<Archive,T>::invoke(Archive &,T (__cdecl &))-Memberfunktion
with
[
Archive=boost::archive::xml_oarchive,
T=Test (void)
]
boost_1_34_1\boost/archive/detail/oserializer.hpp(535): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "boost::archive::detail::save_non_pointer_type<Archive,T>".
with
[
Archive=boost::archive::xml_oarchive,
T=Test (void)
]
boost_1_34_1\boost/archive/detail/common_oarchive.hpp(62): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "void boost::archive::save<Archive,T>(Archive &,T (__cdecl &))".
with
[
Archive=boost::archive::xml_oarchive,
T=Test (void)
]Habe schon versucht mittels BOOST_CLASS_IMPLEMENTATION den Implementation-Level explizit auf object_class_info zu setzen und das Tracking auszuschalten (BOOST_CLASS_TRACKING mit track_never).
Beides jedoch ohne Erfolg.Wie bekomme ich Boost::Serialization ans Laufen?
Mfg NeuroCoder
-
Hi!
Problem gelöst:
// Statt Test s(); // habe ich einfach Test s; // genommen // Zusätzlich muss allerdings noch das const in der serialize Funktion entfernt werden: template<class Archive> void serialize(Archive& ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(_vec) /* etc */; }Mfg NeuroCoder