0

C ++の例外クラスに複数の要素を含めることは可能ですか?例外をスローすると、ユーザーはエラーメッセージだけでなく、例外に関するより多くの情報を収集できますか? 私は以下のクラスを持っています

#include <list>
using namespace std;

class myex : public out_of_range {
private:
    list<int> *li; 
    const char* str = "";
public:
    //myex(const char* err): out_of_range(err) {}
    myex(li<int> *l,const char* s) : li(l),str(s) {}

    const char* what(){ 
        return str;
    }       
};

を使用してmyexを投げるとき

throw myexception<int>(0,cont,"Invalid dereferencing: The iterator index is out of range.");, 

エラーが発生する

error: no matching function for call to ‘std::out_of_range::out_of_range()’.
Any help is appreciated.`.

コメント行のコメントを外し、他のコンストラクターを削除すると、正常に動作します。

4

1 に答える 1

2

ユーザー定義の例外のコンストラクターは、クラス out_of_range のデフォルトのコンストラクターを呼び出そうとします...それが存在しないことを除いて!

コメント付きコンストラクタについて:

myex(const char* err): out_of_range(err) {}
                     //^^^^^^^^^^^^^^^^^ this calls the constructor of 
                     // out_of_range with the parameter err.

現在のコンストラクターを修正するには、out_of_range のコンストラクター (const string& を取る) への明示的な呼び出しを追加する必要があります。

myex(li<int> *l,const char* s) : out_of_range(s), li(l),str(s) {}
于 2013-04-01T06:16:06.573 に答える