C++ 存储类的对象为文件的问题

如题,我变了一个类,想存成文件。voidplayer::save(){fstreamf;f.open("save.dat",ios::out);f<<*this<<end... 如题,我变了一个类,想存成文件。
void player::save()
{
fstream f;
f.open("save.dat",ios::out);
f<<*this<<endl;
f.close();
}
编译通不过,请问怎么才能直接存储类,存储之后又该如何读取,谢谢各位~~
展开
 我来答
百度网友a70ce28
2012-08-29 · TA获得超过992个赞
知道小有建树答主
回答量:619
采纳率:0%
帮助的人:565万
展开全部
首先,f<<*this<<endl;这句话您要表达什么意思
是要将类的数据成员输出到文件里面?还是按照一定的格式输出类的成员?还是完全相互不关联的操作?
你这样好比让C++编译器自己来决定做什么,但是计算机是死的,他不会帮你做
其实你这样做的主要的瓶颈是<<操作符
你可以在你的这个成员函数之前定义一个友元函数!~~记住,是之前定义,并且向前声明!~~~
friend ostream & operator <<(ostream &os,const player &p);//友元函数
你先定义友元函数就可以使用<<了
追问
我想要读取的时候方便,您能给个建议么?
追答
读取?...您的意思是从文件中读取回来么?....您可以按照特定的格式来存取
这样让别人看起来一目了然
还有一种方式是
采用二进制文件方式来存取
f.open("save.dat",ios::out|ios::binary);//最后个代表二进制写入
然后你在写入和读取的时候用write和read函数就可以了,止痒是二进制读取和写入
write语法:
ostream &write( const char *buffer, streamsize num );

write()函数用于输出流,从buffer中写num个字节到当前输出流中。
read语法:
istream &read( char *buffer, streamsize num );

函数read()用于输入流,在将字符放入buffer 之前从流中读取num
个字节。如果碰到EOF,read()中止,丢弃不论多少个字节已经放入。例如:
struct {
int height;
int width;
} rectangle;

input_file.read( (char *)(&rectangle), sizeof(rectangle) );
if( input_file.bad() ) {
cerr << "Error reading data" << endl;
exit( 0 );
}
nusicvvv
2012-08-29 · TA获得超过2575个赞
知道大有可为答主
回答量:3576
采纳率:33%
帮助的人:1999万
展开全部
#include "iostream"

不是什么类都能存储的。比如类里面有复杂的数据结构,有对其他类的引用的内存指针。有系统资源的的引用。这种根本就不能存储。
追问
那如果存储类的话有什么技巧么?只能一个数据元素一个数据元素的寸???
追答
你答对了,就是一个一个数据的处理,没有好的技巧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-08-29
展开全部
friend ostream & operator <<(ostream &os,const player &p){

// 假设p里面有2个成员啊,都是基本数据类型,不是基本类型的话也得重载过operator <<
os << a << b;
return os;
}

friend istream & operator >>(istream &is, player &p){
is >> a >> b;
return is;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangnasa
2012-08-29 · TA获得超过776个赞
知道小有建树答主
回答量:732
采纳率:100%
帮助的人:643万
展开全部
自定义类 你必须实现自己的序列化操作

例如
class A : public CObject
{
A();

..............................

 string Serialize();//序列化 这个返回值可以保存到文件

int UnSerialize(string info); //反序列化

 virtual ~A();
};

void CPosition::Serialize(CArchive &ar)
{
  //把你想要保存的成员变量的值 拼成字符串。 反序列化的时候 你使用A的新对象调用 UnSerialize() 解析这个字符串就恢复了原对象。
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式