5

以下の簡単なコード

// g++ centro.cc -o centro

#include <iostream>
using namespace std;

int  main(int argc, char *argv[])
{
    try
    {
        cout << "Going to throw" << endl;
        throw;
    }
    catch(...)
    {
        cout << "An exception occurred" << endl;
    }
    return 0;
}

アボートを生成します:

Going to throw
terminate called without an active exception
Aborted (core dumped)

何が悪いのかわかりません。誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

8

何かを投げてみてください。あなたは例外を投げていません。

throw;catchそれ自体は通常、ブロック内で同じ例外を再スローするために使用されます。

throw "something";結果をまたはおそらく のインスタンスと比較しますstd::exception

于 2012-07-03T10:20:56.530 に答える
7

あなたのライン

throw;

catchブロック内で例外を再スローするための構文です。

あなたは書くべきです:

throw std::exception();
于 2012-07-03T10:21:38.797 に答える
3

これは、標準 (15.1) によって義務付けられています。

8) オペランドのないスロー式は、現在処理されている例外を再スローします (15.3)。例外は既存の一時的に再アクティブ化されます。新しい一時例外オブジェクトは作成されません。例外はキャッチされたとは見なされなくなります。したがって、std::uncaught_exception() の値は再び true になります。

9) 現在例外が処理されていない場合、オペランドなしで throw 式を実行すると、std:: terminate() (15.5.1) が呼び出されます。

于 2012-07-03T10:36:53.420 に答える
2

throw;現在処理中の例外を独自に再スローしますが、コードには例外がありません。

何かを投げる必要があります。throw std::runtime_error("my message");代わりに次のようなものを試してください。これを含める必要があります#include <stdexcept>

実際のコードでは、独自の例外クラスを作成して、最も可能性の高い例外をスローする必要があります。

于 2012-07-03T10:22:41.327 に答える