读书人

用wirte向资料输出一个对象遇到某个对

发布时间: 2013-09-05 16:02:07 作者: rapoo

用wirte向文件输出一个对象遇到某个对象成员string过长是否会无法输出
这是一个卡类

class DiningCard
{
private: //私有成员
double Balance; //余额

string CardClass; //卡类别

string CardNum; //卡号

string ConsumPassword; //消费密码

string state; //挂失情况

string NameOfHolder; //持卡人姓名

string SexOfHolder; //性别

string UnitOfHolder; //单位

public:
void setBalance(double ba); //设置余额
double getBalance() const; //获得余额

void setCardClass(string cc); //设置卡类别
string getCardClass() const; //获得卡类别

void setCardNum(string cn); //设置卡号
string getCardNum() const; //获得卡号

void setConsumPassword(string cp); //设置消费密码
string getConsumPassword() const; //获得消费密码

void setNameOfHolder(string noh); //设置持卡人姓名
string getNameOfHolder() const; //获得姓名

void setSexOfHolder(string soh); //设置性别
string getSexOfHolder() const; //获得性别

void setUnitOfHolder(string uoh); //设置单位
string getUnitOfHolder() const; //获得单位

void setState (string state); //设置丢失状态
string getState() const; //获得丢失状态
};


我用ofstream类的write函数向文件输出一个对象
out.open("base",ios_base::app|ios_base::binary);
out.write(reinterpret_cast<char*>(&card),sizeof(DiningCard));


out.close();


当成员UnitOfHolder较短时,打开文件可以看到完整的数据
当成员UnitOfHolder较长时,打开文件发现UnitOfHolder完全没有输出到文件,但其他成员均可以输出到文件
请问应如何修改代码?
[解决办法]
就类似一个链表,能直接把链表本身写进文件吗?
要把链表中的节点一个个写文件,下次读取这些节点的数据,重新生成一个链表。
string对象一样。
能直接memcpy复制的对象,才能直接读写对象本身到二进制文件。

读书人网 >C++

热点推荐