首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ifstream无法读取

ifstream无法读取
EN

Stack Overflow用户
提问于 2013-11-28 09:47:31
回答 2查看 972关注 0票数 0

我创建了两个函数来保存对象并将其加载到程序中。

save函数独立地成功保存对象:

代码语言:javascript
运行
复制
void Game::SaveGame()
{
std::string filename = "saves/miner-save-" + currentDate() + ".gem";

std::ofstream outfile;
outfile.open(filename.c_str(), std::ios::binary);

outfile.write((char *)(&myGame), sizeof(Game));

if (outfile.fail())
    std::cout << "write failed" << std::endl;

outfile.close();

std::cout << myGame->myMiner->getX(); //debug purposes : prints 25

}

问题似乎出在load函数中,因为从读取的对象的整数返回的值是不正确的。

代码语言:javascript
运行
复制
void Game::LoadGame()
{

    ..some code..

    std::string filename = GetLoadFilename(nameID); //works

    std::ifstream infile;
    infile.open(filename, std::ios::binary);

    infile.read((char *)&myGame, sizeof(Game));

    if (infile.fail())
    {
        std::cout << "read failed" << std::endl;
    }

    std::cout << myGame->myMiner->getX(); //debug purposes : prints -842150451

    Play(myGame->myMiner->getX(), myGame->myMiner->getY());
}

班级游戏:

代码语言:javascript
运行
复制
class Game {

    Game *myGame;
    Miner *myMiner;
    BlockTypes *myBlockTypes;
    //Block* myBlocks[10000];
    Consola *myConsole;
    Mine *myMine;
    int linhas, colunas;
    int _currentStatus;

    public:
    ..some functions such as load & save
};

加载时,总是显示"read failed“消息,有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2013-11-28 10:22:58

使用指针编写结构会写入指针的值,而不是指向的对象的值。您需要研究序列化。序列化是一种将数据结构化到连续的非结构化介质(如硬盘驱动器)上的方法。也就是说,如何将你的信息组织成一行比特,这样你就能够从同一行比特重建你的对象。之前链接的boost库是一个选择,但也有XMLJSONother solutions是您应该检查的。

票数 1
EN

Stack Overflow用户

发布于 2013-11-28 10:45:54

一般的方法是使用"infile >> myGame“。在游戏类中,定义operator<<和operator>>以使用为游戏类自定义的版本覆盖默认值。

对于类的每个成员,这些函数通常都有一个>>或<<列表(如果您没有定义运算符,这是默认的)。但您需要做出一些决定,并为指针类型成员编写一些代码。对象在内存中的位置将从一个运行移动到另一个运行,因此您不能只保存和加载指针值。例如,在Game::operator<<中,您可能需要在myMine上调用<<来转储它(深度复制)。但是也许Miner是一个指向数组的指针,该数组是单独保存和加载的,因此Game::operator<<保存了一个miner id号或名称字符串,而游戏operator>>使用保存的数据来查找Miner以获取指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20256351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档