我试图通过在自定义类Customer中重载运算符>>()函数,将标记化数据从文本文件读取到指针向量中。我的代码可以通过整个文件读取它们,但是当它完成时我得到一个seg错误
这是我的代码:
int line = 0;
vector<Customer *> customers;
ifstream fin("customers.txt", ios_base::in);
while (fin)
{
Customer *temp = new Customer();
line++;
try
{
fin >> *temp;
customers.push_back(temp);
}
catch(boost::bad_lexical_cast&)
{
cerr << "Bad data found at line " << line
<< " in file customers.txt" << endl;
}
}
假设重载运算符&gt;&gt;()函数用getline()读取一行,并将数据插入到Customer的临时指针中,如果找到任何无效数据,则抛出bad_lexical_cast。
我意识到我可以改变:
while (fin)
为:
while (fin >> *temp)
但是我想保留try / catch块,好像发现了坏数据我只想让它跳过那一行并继续下一行。
我能做些什么来测试下一行是否在那里而没有实际拉动它?类似于扫描仪类中的java hasNextLine?
任何帮助将不胜感激
答案 0 :(得分:1)
您必须检查fin >> *temp
的输出。如果读取失败(即文件结束),则返回false
。
您只需将该行更改为:
即可if(!(fin >> *temp)) break;
(另请参阅here以获得类似问题/问题的答案。)