Something that I learned from this question, but that I thought I'd give a more detailed and easily searchable answer to, is that if you have a base abstract class meant to be inherited such as this, and you've made its destructor virtual pure by adding "= 0" to its end:
class Base {
public:
virtual ~Base() = 0;
};
and you try to derive a class with it, like this:
class Derived : public Base {
public:
~Derived();
};
Derived::~Derived() {
// nothing, this is an example
}
you will get linker errors that are complaining about a lack of implementation for the base's destructor, despite it being a pure virtual method (on MSVC you might get LNK2019 and LNK 2001 errors). So how do you solve this problem?