【发布时间】:2012-01-24 12:46:03
【问题描述】:
我有这些 C++ 头文件
#include <iostream>
#include "istruttore.h"
#define max 30
using namespace std;
//==============================================================================
class corso
{
friend ostream& operator << (ostream& out, const corso& corsoapp);
friend istream& operator >> (istream& in, corso& corso);
public:
int getid_corso();
char* getnomecorso();
double getcosto();
char* getdurata();
int getistruttore_id();
char* getistruttore_name();
char* getistruttore_surname();
void setid_corso(int course);
void setnomecorso(char namecourse[]);
void setcosto (double pay);
void setdurata(char duration[]);
void set_istruttore(char name[], char surname[], int id, int id_corso);
corso();
~corso();
istruttore* ist;
private:
int id_corso;
char nomecorso[max];
double costo;
char durata[max];
};
#include <iostream>
#define max 30
using namespace std;
//==============================================================================
class istruttore {
friend ostream& operator <<(ostream& out, const istruttore& istruttoreapp);
friend istream& operator >>(istream& in, istruttore& istruttore);
public:
int getid_istruttore();
char* getnome();
char* getcognome();
int getid_corso();
void setid_istruttore(int idistruttore);
void setnome(char name[]);
void setcognome(char surname[]);
void setid_corso(int idcorso);
istruttore();
~istruttore();
protected:
int id_istruttore;
char nome[max];
char cognome[max];
int id_corso;
};
我已经为这两个标题实现了所有方法。我想这样写一个二进制文件:
fcliente.write(reinterpret_cast<const char*>(&tmpcorso),sizeof(tmpcorso));
其中tempcorso 是corso 类型的对象。写作可以,但阅读就不行。
我尝试使用此代码读取相同的二进制文件
fcorso.read(reinterpret_cast<char*>(&tmpcorso),sizeof(tmpcorso))
但是当我在tmpcorso 中查看istruttore 的值时,该值不正确。我该如何解决?
【问题讨论】:
-
你能说明你是如何打开文件的吗?
-
fstream fcorso("corso.dat",ios::in|ios::binary);
-
看起来你写了一个结构的字节,其中包含一个指向你真正想要的数据的指针。也就是说,您可能想要写入此指针指向的数据。也就是说,请注意写一堆字节不是二进制格式。它是一组非结构化的字节,迟早会给你带来问题,尽管它可能在短期内起作用,对系统、编译器或平台的任何更改都可能使数据变得无用。您应该使用格式化的读取和写入,如有必要,使用二进制格式。