相关疑难解决方法(0)

你如何在C++中声明一个接口?

如何设置代表接口的类?这只是一个抽象的基类吗?

c++ inheritance abstract-class interface pure-virtual

781
推荐指数
11
解决办法
46万
查看次数

虚函数的最终奇数行为

final关键字添加到虚函数声明时,我遇到了一个奇怪的情况,其定义在一个单独的.cpp文件中.
请考虑以下示例:

IClass.hpp

class IClass //COM-like base interface
{
protected:
    virtual ~IClass(){} //derived classes override this

public:
    virtual void release() final;
};
Run Code Online (Sandbox Code Playgroud)

dllmain.cpp(共享库)

#include "IClass.hpp"
...

void IClass::release()
{
    delete this;
}

...
Run Code Online (Sandbox Code Playgroud)

main.cpp(独立可执行文件)

//various includes here
...

int main(int argc, char** argv)
{
    /* From "IGameEngine.hpp"
       class IGameEngine : public IClass
       {
       ...
       };
    */
    IGameEngine* engine = factoryGameEngine();
    ...
    engine->release();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

事实上,GCC 4.9.2将报告undefined reference to 'IClass::release()'
我的目标是IClass::release()在将其实现隐藏在游戏引擎的共享库中时,将其作为不可覆盖的.
有什么建议?

c++ final undefined-reference c++14

7
推荐指数
1
解决办法
265
查看次数