Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 异常多态性c++;_C++_Exception_Inheritance - Fatal编程技术网

C++ 异常多态性c++;

C++ 异常多态性c++;,c++,exception,inheritance,C++,Exception,Inheritance,我已经创建了自己的异常类,该异常类派生自运行时\u错误,并且在c'tor中得到一个int 为了使用多态性,我想为这个异常创建一个基类,这样我就可以只捕获基类,基本上我将捕获派生类 这就是基类:(在另一个cpp文件中,我得到了baseException::~baseException(){}) 这是派生类: class myException: public runtime_error, public baseException { public: myException(int): ru

我已经创建了自己的异常类,该异常类派生自
运行时\u错误
,并且在c'tor中得到一个int

为了使用多态性,我想为这个异常创建一个基类,这样我就可以只捕获基类,基本上我将捕获派生类

这就是基类:(在另一个cpp文件中,我得到了baseException::~baseException(){})

这是派生类:

class myException: public runtime_error, public baseException
{
public:
    myException(int): runtime_error("Error occured") {}
};
请注意,我在基类中没有任何实际错误,它的唯一作用是在我将要创建的自定义异常类上启用多态性。 这就是为什么它只有一个纯粹的虚拟驱动器。我不需要这个
BaseException
类的任何“实际”对象

但是,当我试图在main中捕获baseException并调用what()时,我不能。
我该怎么做呢?

你忘了括号。应该是

virtual ~baseException()=0 {}

你忘了括号。应该是

virtual ~baseException()=0 {}

如前所述,析构函数需要括号和非内联定义


另外,您从
runtime\u exception
(从AMP-library?)派生,但调用
runtime\u error
(我假设从
std
命名空间)的构造函数。

如前所述,您需要括号和析构函数的非内联定义


另外,您从
runtime\u exception
(从AMP-library?)派生,但调用
runtime\u error
(我假设是从
std
名称空间)的构造函数。

第一个问题是,您缺少析构函数声明中的
()
,并且在类名后面有一个流氓code>:

一旦修复了该问题,可能会出现如下错误:

error: pure-specifier on function-definition

由于C++的标准委员会只知道某些原因,纯虚拟函数不能在类定义中实现。如果希望它是纯虚拟的,则需要将定义移到类之外:

class baseException
{
    virtual ~baseException()=0;
};

inline baseException::~baseException() {}

您还需要确定
myException
是否源于
runtime\u exception
runtime\u error
:您在类标题中使用一个,在构造函数的初始化器列表中使用另一个。假设您使用的是标准异常类型,它可能会出现
std::runtime\u error
(并且,如果头文件中有
使用名称空间std;
,那么您应该删除它,以避免破坏不希望全局名称空间受到那样污染的代码).

第一个问题是您缺少析构函数声明中的
()
,并且在类名后面有一个rogue

一旦修复了该问题,可能会出现如下错误:

error: pure-specifier on function-definition

由于C++的标准委员会只知道某些原因,纯虚拟函数不能在类定义中实现。如果希望它是纯虚拟的,则需要将定义移到类之外:

class baseException
{
    virtual ~baseException()=0;
};

inline baseException::~baseException() {}

您还需要确定
myException
是否源于
runtime\u exception
runtime\u error
:您在类标题中使用一个,在构造函数的初始化器列表中使用另一个。假设您使用的是标准异常类型,则可能会出现
std::runtime\u error
(并且,如果头文件中有
使用命名空间std;
,则应将其删除,以避免破坏不希望全局命名空间受到污染的代码)。

请定义“不工作”。你期望什么,得到什么?添加了一些错误,但这不是重点。根据错误的数量,我想我完全偏离了方向,所以我在这里要求你不要定义“不起作用”。你期望什么,得到什么?添加了一些错误,但这不是重点。由于错误的数量,我想我完全偏离了方向,所以我在这里要求您,内联函数定义中不允许使用纯说明符。dtor的定义必须不一致。并且在
类baseException
之后有一个
太多。内联函数定义中不允许使用纯说明符。dtor必须定义得不正确。而且在
类baseException
之后有一个
太多了。ty,修复了所有问题,但似乎我需要为基类创建一个“what()”方法。这是真的吗?怎么做?@Jjang:如果你想访问
std::exception::what()
,那么也许你应该捕获
std::exception const&
,而不是你自己的基类。ty,修复了所有问题,但似乎我需要为基类创建一个“what()”方法。这是真的吗?如何访问?@Jjang:如果您想访问
std::exception::what()
,那么您可能应该捕获
std::exception const&
,而不是您自己的基类。