2010-09-30 109 views
0

我试图捕捉一个'特定'异常(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"); 
} 
+1

这不是C++。也许C++/CLI? – 2010-09-30 20:45:05

+0

我已经修复了标签。 – 2010-09-30 20:45:50

回答

4

重新抛出表达式(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"); 
} 
+0

抓住了,谢谢。咄。出于某种原因,我认为它会在catch块之后继续,catch块会在它有机会捕获重新抛出的异常之后继续。 \t 我现在看到,重新抛出的异常在try块本身之后继续到任何后续的try-catch块。 - – 2010-09-30 21:21:29

0

是有try catch块以上吗?

你刚刚用throw语句抛出一个异常,没有人接受它。 调试器已将您带到发生异常的位置

+0

哦,谢谢。咄。出于某种原因,我认为它会在catch块之后继续,catch块会在它有机会捕获重新抛出的异常之后继续。 – 2010-09-30 21:15:21

+0

我现在看到,重新抛出的异常继续在try块本身之后,继续到任何后续的try-catch块。 – 2010-09-30 21:16:02

+0

其实我完全错了。你的retrhow应该已经被外部try/catch(Exception)块 – pm100 2010-09-30 21:29:24