如何从std::runtime_error继承

How to inherit from std::runtime_error?

本文关键字:error 继承 runtime std      更新时间:2023-10-16

例如:

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

runtime_error之后使用(""),我得到:

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)

这是正确的语法:

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("") { }
//        ^^^^^^^^^^^^^^^^^^^^^^^^
};

下面是一个演示代码编译的实际示例。

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

#pragma once
#include <stdexcept>
class err : public std::runtime_error
{
public:
    err(const std::string& what = "") : std::runtime_error(what) {}
};