C ++ re throw Exception给出了错误

时间:2010-09-30 20:40:41

标签: exception exception-handling c++-cli try-catch rethrow

我正在尝试捕获'特定'异常(FormatException ^或OverflowException ^),然后重新抛出它并在'general'异常(异常^)catch块中捕获它。

运行时,我通过输入给它一个格式异常。然后我在对话框中收到此错误: “FutureValue.exe中发生了'System.FormatException'类型的未处理异常 附加信息:输入字符串的格式不正确。“ 当我点击'break'时,它会转到#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 个答案:

答案 0 :(得分:4)

rethrow表达式(throw without assignment_expression)导致重新抛出最初抛出的对象。因为异常已经在重新抛出表达式发生的范围内被捕获,所以它将被重新抛出到下一个动态封闭的try块。因此,它不能由重新抛出表达式发生的范围内的catch块处理。

考虑到上述情况,您可能需要编写如下代码:

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");
}

答案 1 :(得分:0)

上面有一个try catch块吗?

您刚刚使用throw语句抛出异常,没有人抓住它。 调试器已将您带到抛出异常的位置