5

重複の可能性:
キャッチされた例外からメッセージを出力する方法は?

これが基本的または重複している場合はお詫びします-最初にいくつかの検索を行いましたが、これに答えるものは見つかりませんでした。

私が次のような基本的なことをした場合:

throw exception("This thing didn't work");

どこで見ることができますか?文字列は、出力コンソール、スタックトレース、またはプロジェクトに関連付けられている.logファイルには表示されません。どこにも見えないのに、なぜそこにひもを入れているのか不思議に思います。もちろん、スタックトレースを使用して、どこで爆発したかを確認することはできますが、そのようなものは、そもそも例外を発生させるという目的に反します。

Javaでは、文字列を指定すると、出力のどこかにその文字列が表示されます。この動作をC++で再現できるかどうか疑問に思います。

4

2 に答える 2

5

std::exception()というメンバー関数がありますwhat()。見る:

http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.3/classstd_1_1exception.html

のようなものについてstd::logic_errorは、コンストラクターに渡したテキストを返します。

于 2012-07-31T15:47:29.397 に答える
1

文字列を表示するには、例外をキャッチする必要があります。次のように、最後の手段として例外ハンドラを用意すると便利です。

int main(int argc, char **argv)
{
    try {
        ...
    }
    catch(const std::exception& e) {
        std::cout << "Uncaught exception: " << e.what() << std::endl;
    }
}

GUI アプリケーションでは、メイン イベント ループに catch ステートメントを配置し、メッセージ ボックスにエラー メッセージを表示できます。

イベント ドリブンの非 GUI アプリケーションでは、メイン イベント ループに catch ステートメントを配置して、エラー メッセージをログ ファイルに書き込むこともできます。

これらのメソッドにより、すべての例外が確実に表示されます。もちろん、ほとんどの例外は、最後の手段である例外ハンドラーに到達する前にキャッチする必要があります。

于 2012-07-31T16:44:54.293 に答える