2011-11-13 19 views
0

runtime_errorから派生したクラスを作成するために継承を使用しようとしていますが、これは演習で使用された正確なコードであり、本の例としてもエラーが発生し続けます。コードは次のとおりです。runtime_error ";"が必要ですか?

class DivideZeroEx : public runtime_error 
{ 
    public: 
     DivideZeroEx() 
      runtime_error(" attempt to divide by zero") 
}; 

ここで、次のようなエラーが表示されます。 runtime_error( "ゼロで除算しようとする")行の前。あなたがメンバー初期化子リストの基底クラスのコンストラクタを呼び出すようにしようとしている

+0

C/C++では、ステートメントをセミコロンで終了する必要があります。あなたはそれらを逃していないことを絶対に確信していますか? –

答えて

9

あなたの基底クラスのコンストラクタを呼び出すための構文は次のようになります。

DivideZeroEx() : runtime_error(" attempt to divide by zero") { } 
+0

助けてくれてありがとう!私はそれが必要なように働いています。では、これらのタイプのruntime_errorキャッチを他のどのような理由で使用できますか? –

+0

私はあなたが求めていることを完全には理解していませんが、必要な場合はカテゴリ別にグループ化する(たとえば、別の継承層を使用するなど)必要な例外ごとに派生クラスを作成することができます。 [こちら](http://www.cplusplus.com/reference/std/stdexcept/runtime_error/)と[this](http://stackoverflow.com/questions/688447/best-practices-for-より詳細な情報については、独自の例外クラスの定義を参照してください。 – Vlad

7

、構文は次のとおりです。

DivideZeroEx():runtime_error(" attempt to divide by zero") 
{ 
} 
+0

@Sjoerd悪いナンセンス。なぜVladの同じ答えがひどく上向きになったのですか?そしてこの1つは下降しましたか? –

1
class DivideZeroEx : public runtime_error 
{ 
public: 
    DivideZeroEx() : runtime_error(" attempt to divide by zero") 
    { 
    } 

}; 
0

この例ではあまり節約されませんが、クラス全体でruntime_errorという名前を使用すると、将来的にベースを交換する方がはるかに簡単です。

class DivideZeroEx : public runtime_error 
{ 
typedef runtime_error base; 

public: 
    DivideZeroEx() : base(" attempt to divide by zero") 
    { 
    } 
}; 
関連する問題