C++抛出异常提供了错误
我试图捕捉一个'特定'异常(FormatException ^或OverflowException ^),然后重新抛出它并将其捕获到'一般'异常(异常^)catch块中。C++抛出异常提供了错误
运行时,我通过输入给它一个格式异常。然后我在对话框中得到这个错误: “FutureValue.exe中发生未处理的'System.FormatException'类型异常 附加信息:输入字符串格式不正确。 当我点击“破”它需要我行#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");
}
重新抛出表达式(throw without assignment_expression)会导致最初抛出的对象被重新抛出。由于异常已在发生重新抛出表达式的范围中捕获,因此它将重新排出到下一个动态包含的try块。因此,它不能由发生rethrow表达式的范围中的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");
}
抓住了,谢谢。咄。出于某种原因,我认为它会在catch块之后继续,catch块会在它有机会捕获重新抛出的异常之后继续。 \t 我现在看到,重新抛出的异常在try块本身之后继续到任何后续的try-catch块。 - – 2010-09-30 21:21:29
是有try catch块以上吗?
你刚刚用throw语句抛出一个异常,没有人接受它。 调试器已将您带到发生异常的位置
哦,谢谢。咄。出于某种原因,我认为它会在catch块之后继续,catch块会在它有机会捕获重新抛出的异常之后继续。 – 2010-09-30 21:15:21
我现在看到,重新抛出的异常继续在try块本身之后,继续到任何后续的try-catch块。 – 2010-09-30 21:16:02
其实我完全错了。你的retrhow应该已经被外部try/catch(Exception)块 – pm100 2010-09-30 21:29:24
这不是C++。也许C++/CLI? – 2010-09-30 20:45:05
我已经修复了标签。 – 2010-09-30 20:45:50