虚拟与纯虚拟基础 class 函数和从 dll 导出
virtual vs pure virtual base class functions and exporting from dll
我在 dll 中定义了一个基 class,如下所示:
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(),派生的 class 需要访问 Base::doSomething 定义,因为我没有明确导出 Base class , 对另一个模块中的派生不可用。
但是为什么纯虚函数不会出现这个问题(它也可以有一个定义)?
P.S我用的是VS2013
But why this problem doesn't happen with pure virtual function(it too could have a definition)?
只有显式调用基 class 的纯虚函数才会发生这种情况。否则不必执行。
例如您是否将 Derived::doSomethingElse()
实施为:
void Derived::doSomethingElse()
{
// Do base class stuff first.
Base::doSomethingElse();
// Then do derived stuff
}
您也会在 Base::doSomethingElse
中看到同样的问题。
我在 dll 中定义了一个基 class,如下所示:
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(),派生的 class 需要访问 Base::doSomething 定义,因为我没有明确导出 Base class , 对另一个模块中的派生不可用。
但是为什么纯虚函数不会出现这个问题(它也可以有一个定义)?
P.S我用的是VS2013
But why this problem doesn't happen with pure virtual function(it too could have a definition)?
只有显式调用基 class 的纯虚函数才会发生这种情况。否则不必执行。
例如您是否将 Derived::doSomethingElse()
实施为:
void Derived::doSomethingElse()
{
// Do base class stuff first.
Base::doSomethingElse();
// Then do derived stuff
}
您也会在 Base::doSomethingElse
中看到同样的问题。