如何从std :: runtime_error继承?

mch*_*hen 12 c++ inheritance runtime-error

例如:

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

随着("")runtime_error我得到:

error: expected '{' before '(' token
error: expected unqualified-id before string constant
error: expected ')' before string constant
Run Code Online (Sandbox Code Playgroud)

否则(没有(""))我得到

In constructor 'err::err()':
error: no matching function for call to 'std::runtime_error::runtime_error()'
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

(你可以在这里测试一下:http://www.compileonline.com/compile_cpp_online.php)

And*_*owl 18

这是正确的语法:

class err : public A, public std::runtime_error
Run Code Online (Sandbox Code Playgroud)

并不是:

class err : public A, public std::runtime_error("")
Run Code Online (Sandbox Code Playgroud)

正如你上面所做的那样.如果要将空字符串传递给构造函数std::runtime_error,请按以下方式执行:

class err : public A, public std::runtime_error
{
public:
    err() : std::runtime_error("") { }
//        ^^^^^^^^^^^^^^^^^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)

这是一个显示代码编译的实例.


rbe*_*nto 5

只是想补充一点,或者该类err可以接受字符串消息并将其简单地转发到std::runtime_error,或者默认情况下为空字符串,如下所示:

#pragma once

#include <stdexcept>

class err : public std::runtime_error
{
public:
    err(const std::string& what = "") : std::runtime_error(what) {}
};
Run Code Online (Sandbox Code Playgroud)

  • 您可能想进一步简化并继承 std::runtime_error 构造函数: `using std::runtime_error::runtime_error`; (3认同)