错误 - 在C ++中“抛出不同的异常”

时间:2010-08-13 00:26:31

标签: c++ exception-handling

我收到一条告诉我的错误

error: declaration of 'virtual FXHost::~FXHost()' throws different exceptions
error: than previous declaration 'virtual FXHost::~FXHost() throw ()'

我不知道如何开始解决这个问题,我以前从未遇到过这个问题。

在我的.h我有:

public:
    virtual                         ~FXHost() throw();

在我的.cpp中我有:

FXHost::~FXHost()
{
   gHost = NULL;
}
指针赞赏。

3 个答案:

答案 0 :(得分:5)

函数声明末尾的throw()是一个异常规范。这意味着该函数永远不会抛出异常。这不能在派生类中被覆盖(仅限于进一步限制),因此是错误。

由于您的实现本身不会抛出异常,因此您只需要在析构函数声明中添加throw()

See here why you should (not) use this (mis)feature of C++

答案 1 :(得分:3)

FXHost::~FXHost() throw()
{
   gHost = NULL;
}

您的实施必须至少在例外投掷方面与其声明一样具有限制性。

答案 2 :(得分:2)

你想:

FXHost::~FXHost() throw()
{
   gHost = NULL;
}

虽然这个析构函数表明设计很糟糕 - 但是通过将指针(甚至是全局指针)设置为NULL,析构函数不太可能正常工作。