When i try to serilize data where Sphere is subclass of geometry the program crashes with unhandled exception.
Exception thrown at 0x000007FEFCA0B87D in Serialization.exe: Microsoft C++ exception: boost::archive::archive_exception at memory location 0x000000000022F730
This happens on this line "ar & g ;"
include "pch.h"
#include <iostream>
#include<fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include "Geometry.h"
#include "Sphere.h"
#include <boost/serialization/export.hpp>
int main()
{
const char* fileName = "saved.txt";
Sphere Sph;
Geometry* g = &Sph;
// save data
{
// Create an output archive
std::ofstream ofs(fileName);
boost::archive::text_oarchive ar(ofs);
ar & g ; // This lines throws exception.
}
Geometry* c_Restored;
//load data
{
// create an input stream
std::ifstream ifs(fileName);
boost::archive::text_iarchive ar(ifs);
ar & c_Restored;
}
c_Restored->PrintGeom();
do
{
std::cout << '\n' << "Press a key to continue...";
} while (std::cin.get() != '\n');
}
/////////////////////////////////////////////////////////////////////
#include "Geometry.h"
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/export.hpp>
class Sphere : public Geometry
{
private:
std::string stdstrSphere;
public:
Sphere() : stdstrSphere( "DefaultSphere"){}
Sphere( std::string str) : stdstrSphere(str) {}
void PrintGeom()
{
std::cout << "Sphere Virtual Function" << std::endl;
}
private:
typedef Geometry _Super;
friend class boost::serialization::access;
template <typename Archive>
void save(Archive& ar, const unsigned version) const {
boost::serialization::base_object<_Super>(*this);
ar & stdstrSphere;
}
template <typename Archive>
void load(Archive& ar, const unsigned version) {
boost::serialization::base_object<_Super>(*this);
ar & stdstrSphere;
}
BOOST_SERIALIZATION_SPLIT_MEMBER()
};
///////////////////////////////////////////////////////////////////////////// #pragma once
#include <string>
#include <boost/serialization/split_member.hpp>
#include <boost/serialization/base_object.hpp>
class Geometry
{
private:
std::string stdstringGeom;
public:
virtual void PrintGeom()
{
std::cout << "geometry virtual function";
}
private:
friend class boost::serialization::access;
template <typename Archive>
void save(Archive& ar, const unsigned version) const {
ar & stdstringGeom;
}
template <typename Archive>
void load(Archive& ar, const unsigned version) {
ar & stdstringGeom;
}
BOOST_SERIALIZATION_SPLIT_MEMBER()
};