加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:12:14 所属栏目:百科 来源:网络整理
导读:如果父类具有纯虚拟析构函数,我该如何正确继承它?我有一个头文件(由IBM Rational Rose生成),如下所示: class MyClass{protected: inline MyClass() {}; MyClass(const MyClass); MyClass operator=(const MyClass);public: inline virtual ~MyClass() = 0;
如果父类具有纯虚拟析构函数,我该如何正确继承它?我有一个头文件(由IBM Rational Rose生成),如下所示:

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

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

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

int main(int argc,char*argv[]) {
  MyClassImpl impl;
  return 0;
}

但无论我尝试什么(即在MyClassImpl中定义析构函数;虚拟/非虚拟),我都会收到错误消息:错误LNK2019:未解析的外部符号“public:virtual __thiscall MyClass ::?MyClass(void)”(?? 1MyClass @@ UAE @ XZ)在函数“public:virtual __thiscall MyClassImpl :: ~MyClassImpl(void)”(?? 1MyClassImpl @@ UAE @ XZ)中引用.

有没有办法在不更改MyClass的情况下实现MyClassImpl?

解决方法

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

MyClass::~MyClass() {}

只有一个.CPP文件.

(参见“纯虚拟析构器”下的http://en.cppreference.com/w/cpp/language/destructor例.也是Why do we need a pure virtual destructor in C++?.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读