使用纯抽象析构函数从类继承

Con*_*tin 3 c++ inheritance abstract-class

如果父类具有纯虚拟析构函数,我该如何正确继承它?我有一个头文件(由IBM Rational Rose生成),如下所示:

class MyClass{
protected:
  inline MyClass() {};
  MyClass(const MyClass&);
  MyClass& operator=(const MyClass&);
public:
  inline virtual ~MyClass() = 0;
  virtual void someMethod() = 0;
};
Run Code Online (Sandbox Code Playgroud)

现在我想实现这个纯抽象类 - 即

class MyClassImpl : public MyClass {
public:
  MyClassImpl(){}
  virtual void someMethod() {}
};

int main(int argc, char*argv[]) {
  MyClassImpl impl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但无论我尝试什么(即在MyClassImpl中定义析构函数;虚拟/非虚拟),我都会收到错误消息:error LNK2019: unresolved external symbol "public: virtual __thiscall MyClass::~MyClass(void)" (??1MyClass@@UAE@XZ) referenced in function "public: virtual __thiscall MyClassImpl::~MyClassImpl(void)" (??1MyClassImpl@@UAE@XZ).

有没有办法在MyClassImpl没有变化的情况下实施MyClass

Ala*_*kes 6

您必须定义析构函数,即使它是纯虚拟(唯一).

MyClass::~MyClass() {}
Run Code Online (Sandbox Code Playgroud)

只有一个.CPP文件.

(例如,请参阅"纯虚拟析构函数"下的http://en.cppreference.com/w/cpp/language/destructor.另外,为什么我们需要在C++中使用纯虚拟析构函数?)