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&
,而不是您自己的基类。