我正在尝试通过在自定义类 Customer 中重载 operator>>() 函数,将文本文件中的标记化数据读取到指针向量中。我的代码可以很好地通过整个文件读取它们,但是当它完成时我得到一个段错误
这是我的代码:
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;
}
}
假设重载的 operator>>() 函数使用 getline() 读取一行并将数据插入到 Customer 的临时指针中,如果发现任何无效数据则抛出 bad_lexical_cast。
我意识到我可以改变:
while (fin)
至:
while (fin >> *temp)
但我想保留 try/catch 块,就好像发现了坏数据一样,我只想让它跳过该行并继续下一行。
我可以做些什么来测试下一行是否存在而不实际拉动它?类似于扫描仪类中的java hasNextLine?
任何帮助将不胜感激