【发布时间】:2013-10-24 09:23:51
【问题描述】:
我正在尝试通过在自定义类 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 的 temp 指针中,如果发现任何无效数据则抛出 bad_lexical_cast..
我意识到我可以改变:
while (fin)
到:
while (fin >> *temp)
但我想保留 try/catch 块,就好像发现了坏数据我只是希望它跳过该行并继续下一行。
我可以做些什么来测试下一行是否存在而不实际拉动它?类似于scanner类中的java hasNextLine?
任何帮助将不胜感激
【问题讨论】:
-
“但是当它完成时我得到一个段错误” - 你到底从哪里得到它?如果它在您的重载运算符中>>,它是如何定义的?
-
对不起,我看了看,seg 错误发生在重载的 operator>>() 函数中:getline(fin, line);
-
所以我想找的是一种在调用 operator>>() 之前测试 fin 是否有另一行的方法