Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"undefined reference" to Virtual Base class destructor [duplicate]

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

like image 494
noctilux Avatar asked Nov 18 '12 21:11

noctilux


1 Answers

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; 
like image 188
Mike Seymour Avatar answered Sep 19 '22 00:09

Mike Seymour