Обработка исключений между функциями c++

Я беру базовый OOP в классе C++. Одно из наших назначений-читать строки из файла, запускать их через функцию (parseLine ()), которая преобразует строку в поток строк, выбрасывать исключения из этой строки, перехватывать исключения в функции readFile и записывать строки, которые выбрасывают исключения в консоль. Строки, которые не создавали исключений, должны быть добавлены в массив struct.

Проблема: броски не бросаются или не ловятся.

Я провел часы, играя с форматированием, пытаясь выяснить, почему мой оператор try catch не работает. Я хотел бы задать более конкретный вопрос, но я думаю, что ответ будет очевиден более опытному программисту, который видит мой код

Примечание: стиль форматирования задается классом.

/**********************************************************************
* struct: Record
* fileName
* user
* time
***********************************************************************/
struct Record
{
   string file;
   string user;
   long time;
};

/**********************************************************************
* function: parseLine
* parse line into struct
***********************************************************************/
void parseLine(const string & line, Record & buffer) throw (string)
{
   assert(line.length() > 0);

   stringstream ss;
   ss.str(line);

   // stream string to struct
   ss >> buffer.file;
   if (ss.fail())
   {
      ss.clear();
      throw string(line);
   }
   ss >> buffer.user;
   if (ss.fail())
   {
      ss.clear();
      throw string(line);
   }

   ss >> buffer.time;
   if (ss.fail() || buffer.time < 1,000,000,000 || buffer.time > 10,000,000,000)
   {
      ss.clear();
      throw string(line);
   }
}

/**********************************************************************
* function: readFile
* read from the file name provided by the user
***********************************************************************/
int readFile(const string & fileName, Record record[])
{
   // declare fstream variable
   ifstream fin(fileName.c_str());

   // error check
   if (fin.fail())
   {
      cout << "ERROR: Unable to read file "
           << fileName
           << endl;
      return 0;        
   }

   // loop through file and store it
   Record buffer;
   string line;
   int size = 0;
   while (getline(fin, line) && size < 500)
   {
      try
      {
         parseLine(line, buffer);
         record[size] = buffer;
      }
      catch (string text)
      {
         cout << "Error parsing line: "
              << text
              << endl;
      }
      size++;
   }

   // close the file
   fin.close();
   return size;
}

Вопрос 1 считываемый файл нарочно содержит ошибки (пустые строки, Инты в неожиданных местах и т.д.), Похоже на СС.fail () не запускается, как это может произойти?

Вопрос 2 Правильно ли написан мой блок try/catch?

Большое спасибо за помощь!

1 ответ

  1. Целочисленные литералы не должны содержать запятых.

    Запятая фактически является оператором C++.