0

这些类中的每一个都位于单独的 dll 模块中:

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


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

在其他.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 链接。这两种解决方案都是不需要的,因为它们会在服务器更改时添加客户端要求。

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

4

1 回答 1

2

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

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

于 2010-06-15T14:42:52.043 回答