【发布时间】:2021-11-06 19:18:31
【问题描述】:
我有一个 C++ 接口,我们称它为IX 有几个方法:
class IX
{
public:
virtual void foo() = 0;
virtual void bar() = 0;
}
此接口位于库 (dll) 中,但考虑到它不包含任何实现,因此尚未导出。
但是,如果我想向这个接口添加一个虚拟析构函数,如下所示,那么 VS2017 链接器会抱怨无法找到析构函数的实现:
class IX
{
public:
virtual ~IX() = 0;
virtual void foo() = 0;
virtual void bar() = 0;
}
链接器错误:
Error LNK2019 unresolved external symbol "public: virtual __cdecl IX::~IX(void)" (??1IX@@UEAA@XZ) referenced in function "public: virtual __cdecl B::~B(void)" (??1B@@UEAA@XZ) test_project
一种解决方案可能是导出接口(并可能为 dtor 放置 =default 实现)。但我的问题是为什么添加虚拟析构函数会导致这种链接器错误?
【问题讨论】:
-
@NutCracker 是的,我知道在单个文件中它可以正常工作。但是,正如我所提到的,接口应该在 dll 中定义并在其外部使用。
标签: c++ linker-errors destructor dllexport