如何从 std::runtime_error 继承?
Posted
技术标签:
【中文标题】如何从 std::runtime_error 继承?【英文标题】:How to inherit from std::runtime_error? 【发布时间】:2013-05-13 00:03:03 【问题描述】:例如:
#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)
【问题讨论】:
【参考方案1】:这是正确的语法:
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 来显示代码编译。
【讨论】:
我在compileonline.com/compile_cpp_online.php上试过了,你的建议给了我no matching function for call to 'std::runtime_error::runtime_error()'
@MiloChen:你确定你复制的所有内容都正确吗?我添加了一个指向显示代码正确编译的实时示例的链接
哦,我明白了,如果我错过了构造函数err() : std::runtime_error("")
,它将无法编译。不是我想要传递一个空字符串——我是强制到的。
@MiloChen:如果此答案解决了您的问题,请考虑将其标记为已接受 :)【参考方案2】:
想补充一点,err
类可以接收字符串消息,然后简单地将其转发给std::runtime_error
,或者默认为空字符串,如下所示:
#pragma once
#include <stdexcept>
class err : public std::runtime_error
public:
err(const std::string& what = "") : std::runtime_error(what)
;
【讨论】:
以上是关于如何从 std::runtime_error 继承?的主要内容,如果未能解决你的问题,请参考以下文章
区别:std::runtime_error 与 std::exception()
为什么std :: runtime_error的c'tor采用对std :: string的常量引用?
误解 std::runtime_error 的 what() 函数