gpt4 book ai didi

c++ - 虚拟与纯虚拟基类函数和从 dll 导出

转载 作者:太空狗 更新时间:2023-10-29 20:54:49 25 4
gpt4 key购买 nike

我在 dll 中定义了一个基类,如下所示:

class Base
{
public:
virtual void doSomething(); // Definition in cpp
virtual void doSomethingElse() = 0; // May have a definition in cpp
};

在另一个dll中,我从Base派生并实现了必要的方法

class Derived : public Base
{
public:
// Use base implementation for doSomething
void doSomethingElse() override;
}

我收到 Base::doSomething() 的链接器错误未解析的外部符号。

据我了解,由于没有覆盖 doSomething(),派生类需要访问 Base::doSomething 定义,因为我没有显式导出 Base 类,派生类无法访问另一个模块中的派生类。

但是为什么这个问题不会发生在纯虚函数上(它也可以有一个定义)?

附言我用的是VS2013

最佳答案

But why this problem doesn't happen with pure virtual function(it too could have a definition)?

只有显式调用基类的纯虚函数时才会发生这种情况。否则无须实现。

例如您是否将 Derived::doSomethingElse() 实现为:

void Derived::doSomethingElse()
{
// Do base class stuff first.
Base::doSomethingElse();

// Then do derived stuff
}

您也会在 Base::doSomethingElse 中看到同样的问题。

关于c++ - 虚拟与纯虚拟基类函数和从 dll 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com