我们正在制作一个列表,其中包含有关棋盘游戏(姓名,年份,得分)的信息。我们从.csv文件中扫描信息,根据该信息创建一个结构,然后将结构添加到列表中。我们继续这样做,直到文件完成阅读。问题是列表的push_back方法不起作用。这是列表类的标题: 注意BoardGame是自定义结构。 BoardGame(wstring name,int year,float score)。
#pragma once
#include "GameEngine.h"
#include "BoardGame.h"
#include <list>
class BoardGameList
{
public:
BoardGameList() {}
virtual ~BoardGameList() {}
// Methods
void Load(const tstring& fileName);
// Members
private:
std::list<BoardGame> m_Games;
};
cpp文件。也许我把列表弄错了?
#include "BoardGameList.h"
#include <fstream>
void BoardGameList::Load(const tstring& fileName)
{
tifstream file(fileName);
tstring line;
if(!file)
{
GAME_ENGINE->MessageBox(_T("Error: The file could not be found!"));
}
else
{
tstring name;
tstring year;
tstring score;
while(!(file.eof()))
{
getline(file,line);
year = line.substr(0,4);
score = line.substr(5,5);
name = line.substr(11,line.find(_T("\n")));
float numberScore = std::stof(score);
int numberYear = std::stoi(year);
m_Games.push_back(BoardGame(name,numberYear,numberScore));
}
}
}
运行程序会触发一个错误(未处理的异常),这会导致我想到“list”类中的以下代码。
_Unchecked_iterator _Unchecked_end()
{ // return unchecked iterator for end of mutable sequence
return (_Unchecked_iterator(this->_Myhead, this));
}
为什么我不能在我的列表中添加内容的任何想法?我尝试在构造函数中添加一些东西来检查它是否可能需要一个元素才能添加更多元素但是即使这样,使用断点也会告诉我内存无法读取。
非常感谢提前。
编辑:BoardGame的标题
#pragma once
#include "GameEngine.h"
struct BoardGame
{
BoardGame(tstring name, int year, float score);
//Methods
tstring operator<<(BoardGame rhs);
//Members
tstring m_Name;
int m_Year;
float m_Score;
};
答案 0 :(得分:1)
抛出什么异常?这对于调试问题至关重要。
如果没有这些信息,我最好的猜测是这一行:
name = line.substr(11,line.find(_T("\n")));
将在没有尾随换行符的任何行或任何长度小于11个字符的行上抛出异常。