"undefined reference" to Virtual Base class destructor [duplicate]
Asked Answered
G

1

37

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

Garrett answered 18/11, 2012 at 21:29 Comment(0)
Y
52

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;
Yenta answered 18/11, 2012 at 21:33 Comment(2)
Thank you very much -- that's one problem less...Garrett
A, so called, C++ interface is a class in which all methods are pure virtual, all but the destructor?Anthraquinone

© 2022 - 2024 — McMap. All rights reserved.