C ++ re throw Exception дает ошибку - PullRequest
0 голосов
/ 01 октября 2010

Я пытаюсь перехватить «конкретное» исключение (FormatException ^ или OverflowException ^), а затем повторно выдать его и перехватить в блоке «общего» исключения (Exception ^).

При запуске я даю ему исключение формата через ввод. Затем я получаю эту ошибку в диалоговом окне: «Произошло необработанное исключение типа« System.FormatException »в FutureValue.exe Дополнительная информация: входная строка была в неправильном формате. " Когда я нажимаю «перерыв», я перехожу на строку # 232.

Вот частичный код:

try
{
...
}
catch(FormatException^ ex)
{
      MessageBox::Show("FormatException Occured.  Message: " + ex->Message);
      throw;
}
***line# 232*** catch(OverflowException^ ex)
{
      MessageBox::Show("Overflow Occured. Message: " + ex->Message);
      throw;
}
catch(Exception^ ex)
{
      MessageBox::Show("TESTING");
}

Ответы [ 2 ]

4 голосов
/ 01 октября 2010

Выражение перебрасывания (throw без assignment_expression) вызывает перебрасывание первоначально брошенного объекта.Поскольку исключение уже перехвачено в области, в которой происходит выражение rethrow, оно перебрасывается в следующий динамически включаемый блок try.Следовательно, он не может быть обработан блоками перехвата в области, в которой произошло выражение повторного вызова.

Учитывая вышесказанное, вы можете написать свой код следующим образом:

try
{
    try
    {
       //...
    }
    catch(FormatException^ ex)
    {
          MessageBox::Show("FormatException Occured.  Message: " + ex >Message);
          throw;
    }
    catch(OverflowException^ ex)
    {
          MessageBox::Show("Overflow Occured. Message: " + ex->Message);
          throw;
    }
}
catch(Exception^ ex)
{
      MessageBox::Show("TESTING");
}
0 голосов
/ 01 октября 2010

есть ли блок try catch выше этого?

Вы только что сгенерировали исключение с помощью оператора throw, никто его не перехватил.Отладчик перенес вас туда, где было сгенерировано исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...