2011-12-25 9 views
1

私は関数を呼び出していますが、その関数で例外をスローしています。しかし、私は同じ関数でそれをキャッチしたくないのですが、その関数が呼び出された場所をキャッチしたい、私のコード例です。C++の例外メカニズムの問題

void foo()throw(...){ 
    std::cout << "FOO" <<std::endl; 
    throw "Found"; 
} 
void main(){ 
    try{ 
     foo(); 
    } 
    catch(...){ 
    std::cout << "exception catched" <<std::endl; 
    } 
} 

しかし、私はfoo関数で例外をスローしているところでクラッシュしていますが、main関数でcatchしたいと思います。

どうすればいいですか?なしオペランドと

答えて

2
throw; 

throw現在処理されている例外を再スロー。つまり、catchブロックでのみ使用できます。 throw;が実行されると、あなたはcatchブロックにいないので、プログラムは終了します。

何かのように、実行時エラー:throw std::runtime_error("oops");を投げる必要があります。また


なお、例外仕様(例えばvoid foo() throw(...)throw(...))を使用すべきではありません。理由として説明については、"A Pragmatic Look at Exception Specifications."

+0

で自分の質問に答える見る「が見つかりました....」。私は書いたことを忘れてしまった。 –

+0

問題が何であるか教えていただけない場合は、問題を解決する手助けはできません。質問の[新規]コードの先頭に '#include 'を追加してVisual C++ 2010 SP1でコンパイルすると、エラーなしでコンパイルされて実行されます。 –