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++?.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |