我在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类,所以派生它不可用于另一个模块。
但是为什么纯虚函数不会发生这个问题(它也可能有定义)?
P.S 我正在使用VS2013
答案 0 :(得分:4)
但是为什么纯虚函数不会发生这个问题(它也可能有定义)?
只有在显式调用基类的纯虚函数时才会发生这种情况。否则,没有必要实施。
E.g。您是否已将Derived::doSomethingElse()
实施为:
void Derived::doSomethingElse()
{
// Do base class stuff first.
Base::doSomethingElse();
// Then do derived stuff
}
你也会看到Base::doSomethingElse
同样的问题。