您必须定义析构函数,即使它是纯虚拟(唯一)。
加
MyClass::~MyClass() {}
只有一个.CPP文件。
(例如,参见 http://en.cppreference.com/w/cpp/language/destructor 在“纯虚拟析构者”下。也 为什么我们需要在C ++中使用纯虚拟析构函数? 。)
而是声明你的 virtual 像这样的析构函数,有一个正文:
virtual
inline virtual ~MyClass() {}; inline virtual ~MyClass() = default; // C++11
它必须实现(不仅仅是声明),否则,将无法破坏 MyClass 及其派生类(您的声明禁用默认生成的析构函数,但不提供替代实现)。
MyClass
注意 virtual 成员函数仍然可以有一个实现,所以你可以有:
inline virtual ~MyClass() = 0;
和
virtual MyClass::~MyClass() {}; // defined in .h file because of inline