2010-09-30 121 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