虚拟与纯虚拟基类函数并从DLL导出

virtual vs pure virtual base class functions and exporting from dll

本文关键字:虚拟 DLL 导出 类函数 基类      更新时间:2023-10-16

我在DLL中定义了一个基类:

class Base
{
   public:
      virtual void doSomething(); // Definition in cpp
      virtual void doSomethingElse() = 0; // May have a definition in cpp
};

在另一个DLL中,我从基础中得出并实现必要的方法

class Derived : public Base
{
  public:
     // Use base implementation for doSomething
     void doSomethingElse() override;
}

我正在获取链接器错误未解决的基础外部符号:: dosomething()。

从我的理解中,由于Dosomething()并非超过,因此派生的类需要访问base :: dosomething定义,因为我尚未明确指出基类,因此无法派生,而在另一个模块中衍生。

但是为什么纯虚拟函数不会发生这个问题(也可以具有定义)?

P.S 我正在使用VS2013

但是为什么纯虚拟函数不会发生这个问题(也可以具有定义)?

这只有在明确调用基类的纯虚拟函数时才发生。否则,不必实施。

例如。您是否实施Derived::doSomethingElse()为:

void Derived::doSomethingElse()
{
   // Do base class stuff first.
   Base::doSomethingElse();
   // Then do derived stuff
}

您也会看到Base::doSomethingElse的同样问题。