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)
这是一个显示代码编译的实例.
只是想补充一点,或者该类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)