0

これは単純なことだと確信していますが、これを明確に指定している他の投稿を見つけることができませんでしたが、どこかに埋もれているに違いないと確信しています.

C++ で、以下の方法で try catch ブロックを使用する場合、エラー メッセージに文字列変数を追加するにはどうすればよいですか?

これを行おうとすると、未処理の例外が発生します。返されるタイプと関係がありますか?char* ではなく文字列を返しているようです。それが正しい場合、それが問題の原因になりますか? これをどのように調整しますか?追加のキャッチ(const string my_msg)を追加しようとしましたが、それも機能しませんでした。

string msg = "message";
try{
    if (...)
        throw "My error " + msg;
    }
catch (const char* my_msg){
    cerr << my_msg << endl;
}
4

1 に答える 1

2

"My error " + msg文字列と.を連結する操作です。この操作により、 type の一時変数が生成されます。したがって、スローされた変数は、 type の catch 句でキャッチする必要があります。const char*std::stringstd::stringstd::string

catch (const std::string& my_msg){
    cerr << my_msg << endl;
}

それでも、例外を から派生させることをお勧めしstd::exceptionます。ただし、独自の例外クラスを作成する必要はありませんstd::runtime_error。一般的な実行時例外の有用な分類を提供する派生クラスがあります。

例外に個別のタイプが必要な場合が多くありますが、その多くはプロジェクトまたはドメイン固有のものです。C++11 では、独自の例外タイプを作成するのは簡単です。

struct my_exception : std::runtime_exception {
    using std::runtime_exception::runtime_exception;   // Inherit runtime_exception's constructors
};

これは、C++11 の継承コンストラクターを使用します。

于 2014-03-04T06:38:36.980 に答える