2013-05-13 6 views
8

std :: runtime_errorから継承する方法は?たとえば

runtime_error("")
#include <stdexcept> 
class A { }; 
class err : public A, public std::runtime_error("") { }; 
int main() { 
    err x; 
    return 0; 
} 

私が手:

("")なし)他
error: expected '{' before '(' token 
error: expected unqualified-id before string constant 
error: expected ')' before string constant 

私が間違って何が起こっている

In constructor 'err::err()': 
error: no matching function for call to 'std::runtime_error::runtime_error()' 

を取得しますか?

(あなたがここでそれをテストすることができます:http://www.compileonline.com/compile_cpp_online.php)を

答えて

13

これは正しい構文です:あなたは上記のやっていると

class err : public A, public std::runtime_error("") 

class err : public A, public std::runtime_error 

そしてません。あなたがstd::runtime_errorのコンストラクタに空の文字列を渡したい場合は、それをこのように実行します。ここでは

class err : public A, public std::runtime_error 
{ 
public: 
    err() : std::runtime_error("") { } 
//  ^^^^^^^^^^^^^^^^^^^^^^^^ 
}; 

は、コードのコンパイルを表示するlive exampleです。

+1

私はhttp://www.compileonline.com/compile_cpp_online.phpで試してみましたが、あなたの提案は '' std :: runtime_error :: runtime_error() ''の呼び出しに一致する関数がありません。 – mchen

+0

@MiloChen:Areあなたは確かにすべてを正しくコピーしましたか?コードが正しくコンパイルされていることを示すライブサンプルへのリンクを追加しました。 –

+1

str :: runtime_error( ""){} 'コンストラクタを逃した場合、コンパイルされません。私は空の文字列を渡すことを望んでいるわけではありません - 私は強制されます*。 – mchen

関連する問題