用C ++读取/写入对象数据到文件 [英] Reading/writing object data to a file in C++
问题描述
您好,
我是初学C ++程序员,我正在努力通过编写一个小文本游戏来开发。
现在我正在尝试编写一个很好的类来创建和管理播放器配置文件,并且最近遇到了一个问题,同时找到了一种使用fstream保存和加载播放器变量的方法。
这是我希望这个类看起来的一个例子:
Hello,
I'm a beginner C++ programmer, and I'm trying to develop by writing a little text game.
Right now I'm trying to write a nice class for creating and managing a player profile, and have recently ran into an issue while finding a way to save and load player variables using fstream.
Here's an example of how I want this class to look:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class cPlayer;
class cPlayer
{
protected:
string strName;
int nSomeInteger;
int nSomeInteger2;
public:
cPlayer(){}
cPlayer(string Name)
{
strName=Name;
nSomeInteger=10;
nSomeInteger2=20;
}
string ShowName() {return strName;}
int ShowSomeInteger() {return nSomeInteger;}
int ShowSomeInteger2() {return nSomeInteger2;}
void SavePlayer();
void LoadPlayer();
};
void cPlayer::SavePlayer()
{
string strFileName=ShowName()+".dat";
ofstream ofsSavePlayer(strFileName.c_str());
ofsSavePlayer<<ShowName()<<endl<<ShowSomeInteger()<<endl<<ShowSomeInteger2();
}
void cPlayer::LoadPlayer()
{
string strFileName=ShowName()+".dat";
ifstream ifsLoadPlayer(strFileName.c_str());
ifsLoadPlayer>>ShowName()>>endl>>ShowSomeInteger()>>endl>>ShowSomeInteger2();
}
int main()
{
string strString;
cin>>strString;
cPlayer(strString);
// - rest of the code that tests whether saving and loading went successfully.
// Not important right now.
return 0;
}
现在,问题是如以下:
Now, the problem is as following:
|46|error: no match for 'operator>>' in 'std::operator>><char, std::char_traits<char>, std::allocator<char> >((* & ifsLoadPlayer.std::basic_ifstream<char>::<anonymous>), (* &((cPlayer*)this)->cPlayer::strName)) >> std::endl'|
这基本上是这一行:
It's basically this line:
ifsLoadPlayer>>strName>>endl>>nSomeInteger>>endl>>nSomeInteger2;
我怎样才能使它工作?
提前感谢任何善意的建议。 :)
How can I make it work?
Thanks in advance for any kind advice. :)
推荐答案
ifsLoadPlayer>> ShowName()> > endl>> ShowSomeInteger()>> endl>> ShowSomeInteger2();
ifsLoadPlayer>>ShowName()>>endl>>ShowSomeInteger()>>endl>>ShowSomeInteger2();
你不能这样做。你必须写一些像
You cannot do that. You have to write something like
ifsLoadPlayer>>strName>>nSomeInteger>>nSomeInteger2;
我在roder中重写了你的代码以使其正常工作。但是,为了实现强大的实施,您应该研究序列化 [ ^ ]。
I rewrote your code in roder to make it 'working'. However, for a robust implementation you should study serialization[^].
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class cPlayer;
class cPlayer
{
protected:
string strName;
int nSomeInteger;
int nSomeInteger2;
public:
cPlayer(){}
cPlayer(string Name)
{
strName=Name;
nSomeInteger=10;
nSomeInteger2=20;
}
string ShowName() {return strName;}
int ShowSomeInteger() {return nSomeInteger;}
int ShowSomeInteger2() {return nSomeInteger2;}
void SavePlayer(const string & fname);
void LoadPlayer(const string & fname);
};
void cPlayer::SavePlayer(const string & fname)
{
string strFileName=fname+".dat";
ofstream ofsSavePlayer(strFileName.c_str());
ofsSavePlayer<<strName<< endl <<nSomeInteger << endl<<nSomeInteger2;
}
void cPlayer::LoadPlayer(const string & fname)
{
string strFileName=fname+".dat";
ifstream ifsLoadPlayer(strFileName.c_str());
ifsLoadPlayer>>strName>>nSomeInteger>>nSomeInteger2;
}
int main()
{
string strString;
cin>>strString;
cPlayer p1(strString);
p1.SavePlayer(p1.ShowName()); // save player 1
cPlayer p2;
p2.LoadPlayer(p1.ShowName()); // load player 2 members from (player 1) file
return 0;
}</string></fstream></iostream>
这篇关于用C ++读取/写入对象数据到文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!