Witam, mam pewien problem związany z zapisem do pliku binarnego stworzonej klasy.
Zapisuje ona do pliku wskaznik do tablicy a nie zawartość pcoord[1] oraz pcoord[0].
W dodatku na końcu pojawia się BLOCK_TYPE_IS_VALID.
Co zmienić aby do pliku zostały zapisane dwie liczby double (pcoord[0] i pcoord[1]
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
class my_coord
{
protected:
double *pcoord; //pcoord[0] -x ; pcoord[1] - y
double x, y;
//my_mess msg;
void alloc();
public:
void set(double x, double y) { pcoord[0] = x; pcoord[1] = y; }
my_coord() { alloc(); pcoord[0] = pcoord[1] = 0; }
my_coord(double x, double y);
my_coord(const my_coord & ob);
~my_coord();
my_coord & operator = (const my_coord &ob);
friend istream & operator >> (istream &strm, my_coord &ob);
friend ostream & operator << (ostream &strm, const my_coord &ob);
bool operator == (const my_coord & left) const;
};
my_coord & my_coord::operator = (const my_coord &ob)
{
if (ob.pcoord)
{
if (!pcoord)
alloc();
pcoord[0] = ob.pcoord[0];
pcoord[1] = ob.pcoord[1];
}
else
{
if (pcoord)
delete[] pcoord;
pcoord = NULL;
}
//msg = ob.msg;
return *this;
}
istream & operator >> (istream &strm, my_coord &ob)
{
cout << "x :";
strm >> ob.pcoord[0];
cout << "y :";
strm >> ob.pcoord[1];
return strm;
}
my_coord::my_coord(const my_coord & ob)
{
alloc();
pcoord[0] = ob.pcoord[0];
pcoord[1] = ob.pcoord[1];
}
ostream & operator << (ostream &strm, const my_coord &ob)
{
strm << ob.pcoord[0] << " " << ob.pcoord[1];
return strm;
}
void my_coord::alloc()
{
try
{
pcoord = new double[2];
}
catch (bad_alloc)
{
// msg.mess(my_mess::ERR_ALLOC_MEM);
}
}
my_coord::my_coord(double x, double y)
{
alloc();
pcoord[0] = x;
pcoord[1] = y;
}
my_coord::~my_coord()
{
delete[] pcoord;
pcoord = NULL;
}
bool my_coord::operator == (const my_coord & left) const
{
return(pcoord[0] == left.pcoord[0] &&
pcoord[1] == left.pcoord[1]);
}
int main()
{
my_coord crd, temp;
crd.set(12, 32);
fstream plik;
plik.open("test.bin", ios::out | ios::binary);
plik.write(reinterpret_cast<char*>(&crd), static_cast<streamsize>(sizeof(my_coord)));
plik.close();
plik.open("test.bin", ios::in | ios::binary);
plik.read(reinterpret_cast<char*>(&temp), static_cast<streamsize>(sizeof(my_coord)));
cout << temp;
plik.close();
return 0;
}