C ++ REスロー例外によりエラーが発生します
-
26-09-2019 - |
質問
「具体的な」例外(formatexception^またはoverflowexception^)をキャッチし、再スローして「一般」の例外(例外^)キャッチブロックでキャッチしようとしています。
実行すると、入力を介してフォーマットの例外を与えます。次に、このエラーをダイアログボックスで取得します:「futurevalue.exe追加情報:入力文字列は正しい形式ではありませんでした。 「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");
}
解決
rethrow式(assignment_expressionなしでスロー)により、元々投げられたオブジェクトが弾力性を発揮します。例外はすでにrethrow式が発生する範囲でキャッチされているため、次の動的に囲まれたトライブロックに復帰します。したがって、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");
}
他のヒント
これより上にトライキャッチブロックはありますか?
スローステートメントで例外を投げただけで、誰もそれをキャッチしていません。デバッガーはあなたを例外がスローされた場所に連れて行きました
所属していません StackOverflow