"undefined reference" to Virtual Base class destructor

noctilux picture noctilux · Nov 18, 2012 · Viewed 33.2k times · Source

Possible Duplicate:
What is an undefined reference/unresolved external symbol error and how do I fix it?

I have some experience with Java, and am now doing a C++ course. I wanted to try writing an interface, but I have run into some trouble with destructors which I have not been able to resolve, even with the help on the Internet... Here's my code:

    class Force {

    public:

    virtual ~Force();
    virtual VECTOR eval(VECTOR x, double t);

};

class InvSquare : public Force {

    public:

    InvSquare(double A) {

        c = A;

    }

    ~InvSquare(){};

    VECTOR eval(VECTOR x, double t) { // omitted stuff }

    private:
    double c;

};

I have tried to declare a virtual destructor for the base class, and a non-virtual one for the derived class, but I get an error saying "undefined reference to `Force::~Force()'". What does it mean, and how can I fix it?

Forgive me if this is a silly question!

Thank you very much for your help, noctilux

Answer

Mike Seymour picture Mike Seymour · Nov 18, 2012

You've declared the destructor, but not defined it. Change the declaration to:

virtual ~Force() {}

to define it to do nothing.

You also want to make all the functions in the abstract interface pure virtual, otherwise they will need to be defined too:

virtual VECTOR eval(VECTOR x, double t) = 0;