21

例如:

#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

4

2 回答 2

23

这是正确的语法:

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

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

于 2013-05-13T00:05:00.610 回答
4

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

#pragma once

#include <stdexcept>

class err : public std::runtime_error
{
public:
    err(const std::string& what = "") : std::runtime_error(what) {}
};
于 2021-05-26T14:41:38.353 回答