views:

168

answers:

3

I am getting an error that tells me

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

I am not sure how to begin solving this, I have never encountered this before.

in my .h I have:

public:
    virtual                         ~FXHost() throw();

in my .cpp I have:

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

Pointers appreciated.

+5  A: 

The throw() at the end of a function declaration is an exception specification. It means the function never throws an exception. This cannot be overridden (only restricted further) in derived classes, hence the error.

Since your implementation doesn't throw exceptions itself, all you need is adding throw() to your destructor declaration.

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

jpalecek
+2  A: 

You want:

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

Though this destructor suggests a poor design - it's unlikely that a destructor will work correctly simply by setting a pointer, even a global pointer, to NULL.

anon
Looks like resetting static state so that e.g. a singleton can be replaced after the old one is destroyed. Don't see a problem with that. All the real cleanup could be in member subjects which implement RAII.
Ben Voigt
@Ben So who is destroying the old one? and "subjects"?
anon
I meant to type "subobjects".
Ben Voigt
+2  A: 
FXHost::~FXHost() throw()
{
   gHost = NULL;
}

Your implementation has to be at least as restrictive in terms of exception throwing as its declaration.

haffax