【发布时间】:2016-03-01 02:12:06
【问题描述】:
如果父类有一个纯虚析构函数,我该如何正确继承它?我有一个头文件(由 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 中定义析构函数;虚拟/非虚拟),我都会不断收到错误消息: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)。
有什么方法可以在不更改MyClass 的情况下实现MyClassImpl?
【问题讨论】:
-
你用的是什么编译器?看起来像 msvc 但只是为了确认。
-
您不能销毁没有析构函数的类的实例。你只能动态创建一个然后泄漏它。
-
因为 'MyClass::~MyClass( void )' 无法解析。在头文件或像 @MinorThreat 发布的单独文件中定义该方法。
标签: c++ inheritance abstract-class