[英]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.