例如:
#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()'
)我
{{1}}
出了什么问题?
(您可以在此处测试:http://www.compileonline.com/compile_cpp_online.php)
答案 0 :(得分:16)
这是正确的语法:
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 :(得分:0)
想补充一点,或者 err
类可以接受一个字符串消息并将其简单地转发到 std::runtime_error
,或者默认情况下是一个空字符串,如下所示:
#pragma once
#include <stdexcept>
class err : public std::runtime_error
{
public:
err(const std::string& what = "") : std::runtime_error(what) {}
};