gpt4 book ai didi

c++ - 文件读取类C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:44 24 4
gpt4 key购买 nike

我正在上文件阅读课。它应该在构造时使用给定的字符串打开文件,并根据调用的构造函数使用提供的第二个字符串跳过文件到给定字符串之后的行。

这是我的代码:

SnakeFileReader::SnakeFileReader(string filePath)
{
fileToRead_.open(filePath.c_str(), ios::in);
}
SnakeFileReader::SnakeFileReader(string filePath, string startString)
{
fileToRead_.open(filePath.c_str(), ios::in);

string toFind;

while (toFind != startString && !fileToRead_.eof())
{
fileToRead_ >> toFind;
}
}
string SnakeFileReader::ReadLine()
{
string fileLine;

if (!fileToRead_.fail() && !fileToRead_.eof())
fileToRead_ >> fileLine;

return fileLine;
}
int SnakeFileReader::ReadInt()
{
string fileLine = "";

if (!fileToRead_.fail() && !fileToRead_.eof())
fileToRead_ >> fileLine;

int ret;

istringstream(fileLine) >> ret;

return ret;
}
SnakeFileReader::~SnakeFileReader()
{
fileToRead_.close();
}

我遇到的问题是在第二个构造函数中出现了段错误。我在声明一个字符串后立即在读取行函数中遇到另一个段错误。

[编辑] 这是请求的额外代码。作为我学位第一年的一部分,我正在制作一个“贪吃蛇游戏”。我希望游戏读取和保存文件而不是硬编码变量值。我最终将大量使用此类来设置游戏中的关卡。然而,这里有几行应该展示我打算如何使用这个类:

//Level.cpp
std::string fileToRead = "resources/files/level1.txt";
SnakeFileReader sfr(fileToRead);
std::string mapFilePath = sfr.ReadLine();
ImageFile(mapFilePath).load(map_layout);
mapWidth_ = sfr.ReadInt();
mapHeight_ = sfr.ReadInt();
level_cell_size_ = sfr.ReadInt();

map_ = new TileData*[mapWidth_];

for (int i = 0; i < mapWidth_; i++)
{
map_[i] = new TileData[mapHeight_];
}

文件布局:

resources/images/Map1_Layout.bmp
40
30
20

类声明:

#ifndef SNAKE_FILE_READER_HPP
#define SNAKE_FILE_READER_HPP

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;
class SnakeFileReader
{
public:
SnakeFileReader(string filePath);
SnakeFileReader(string filePath, string startString);
~SnakeFileReader();
string ReadLine();
int ReadInt();
private:
ifstream fileToRead_;
};
#endif // SNAKE_FILE_READER_HPP

最佳答案

在 ReadLine 函数中,您返回对函数堆栈上分配的变量的引用。你正在破坏堆栈,疯狂的事情可能会发生。你的编译器应该已经警告过你了。

关于c++ - 文件读取类C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com