0

コードで発生した例外を制御しようとしていますが、このサンプルは C++ Builder 5 で正常に動作しません。

void __fastcall TForm1::Button1Click(TObject *Sender)
{ 
    try
    {
         throw Exception("NoNumber");
    }
    catch(Exception& E)
    {
        // but we never get the LALAL message
        ShowMessage("LALAL");
    }
}

例外が発生したときに catch ブロックに到達しないのはなぜですか?

4

1 に答える 1

0

constまず、代わりに参照によって例外をキャッチする必要があります。

catch(const Exception& E)

これにより、コンパイラは、例外を管理するためにより効率的なコードを生成できます。ただし、それだけでは例外のキャッチを防ぐことはできません。

デバッガー内でアプリを実行している場合は、デバッガーが最初に例外をキャッチすることに注意してください。そのため、F9 キーまたは [実行] ツールバー ボタンを押して、通常の処理のために例外をアプリに戻すようにデバッガーに指示する必要があります。または、例外を無視するようにデバッガーを構成します。

デバッガーの外部でアプリを実行している場合、表示されたコードに問題はなくcatch、通常の条件下で例外をキャッチできません。

私は何年も BCB5 を使用してきましたが、このタイプのコードは常にうまく機能しています (私は常に を使用していますがconst)。

于 2013-04-23T19:30:40.860 に答える