簡體   English   中英

虛函數上未解析的外部符號

[英]Unresolved external symbol on virtual function

這些類中的每一個都在單獨的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的派生鏈接的模塊(未顯示的是export / import指令)。 包含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鏈接。 不需要這兩種解決方案,因為它們會在服務器更改時增加客戶端要求。

在這種情況下,有什么更好的方法來訪問/定義基類虛擬方法的想法嗎?

發生的事情是virtual Base::bar必須位於Derived的vtable中,因為沒有Derived::bar

我不理解您對“服務器更改時的客戶端要求”的評論。 我看不到基本/派生到客戶端/服務器的映射。 對我來說,它們是兩個獨立的維度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM