我已经创建了我自己的异常类,它从runtime_error派生,并在c‘’tor中获得一个int。
我想为这个异常创建一个基类,以便使用多态性,这样我只能捕获基类,基本上我将捕获派生类。
因此,这是基类:(在另一个cpp文件中,我得到了baseException::~baseException(){})
class baseException
{
virtual ~baseException()=0 {}
};这是派生类:
class myException: public runtime_error, public baseException
{
public:
myException(int): runtime_error("Error occured") {}
};请注意,我在基类中没有任何实际的错误,它的唯一作用是使我能够在将来的自定义异常类上实现多态性。这就是为什么它只有一个纯虚拟d‘’tor的原因。我不需要这个BaseException类的任何“实际”对象。
但是,当我试图在main中捕获baseException并调用what()时,我做不到。我该如何让它工作呢?
发布于 2012-06-18 20:21:53
第一个问题是您在析构函数的声明中遗漏了(),并且在类名后面有一个流氓:。
一旦你修复了这个问题,你可能会得到如下的错误:
error: pure-specifier on function-definition由于一些只有C++标准委员会知道的原因,纯虚函数不能像这样在类定义中实现。如果您希望它是纯虚拟的,那么您需要将定义移到类之外:
class baseException
{
virtual ~baseException()=0;
};
inline baseException::~baseException() {}您还需要决定myException是从runtime_exception派生的,还是从runtime_error派生的:一个在类头中使用,另一个在构造函数的初始值列表中使用。假设您使用的是标准异常类型,则可能应该使用std::runtime_error (并且,如果您的头文件中有using namespace std;,那么您应该删除它,以避免破坏不期望全局名称空间受到那样污染的代码)。
发布于 2012-06-18 20:21:36
如前所述,您需要为析构函数使用圆括号和非内联定义。
此外,您还可以从runtime_exception派生(从AMP库?)但是调用runtime_error的构造函数(我假设是从std名称空间)。
发布于 2012-06-18 20:16:49
你忘了括号。它应该是
virtual ~baseException()=0 {}https://stackoverflow.com/questions/11082574
复制相似问题