虚函数上未解析的外部符号

时间:2010-06-15 14:35:07

标签: c++ visual-c++ virtual-functions unresolved-external

这些类中的每一个都在不同的dll模块中:

class Base
{
public:
  virtual void foo();
  void bar();
};


class Derived : public Base
{
public:
  // override Base::foo()
  void foo();
};

在Other.cpp中:

#include "Derived.h"

包含带有Base.lib的派生链接的模块(未显示是导出/导入指令)。包含Other.cpp的模块与Derived.lib链接,但不包含Base.lib。到目前为止,一切正常。

但是,如果我将Base :: bar()更改为虚拟并且不对Derived进行更改,则链接器在链接Other.dll时会抱怨:

Other.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Base::bar()" ...

我找到的唯一解决方案是在Derived中覆盖Base :: bar()或让Other.dll也与Base.lib链接。这两种解决方案都不是理想的,因为它们会在服务器更改时添加客户端要求。

关于在这种情况下访问/定义基类虚拟方法的更好方法的任何想法?

1 个答案:

答案 0 :(得分:2)

正在发生的事情是virtual Base::bar需要出现在Derived的vtable中,因为没有Derived::bar

我不明白您对“服务器更改时的客户端要求”的评论。我没有看到base / derived如何映射到客户端/服务器。它们对我来说是两个独立的维度。