【发布时间】:2021-10-21 20:31:06
【问题描述】:
我有一个实现虚方法 f() 的 BASE 类。我还有一个 INTERFACE 类,它有一个纯虚方法 f()。然后我有一个继承了 BASE 和 INTERFACE 的 DERIVED 类。当我尝试实例化 DERIVED 时,出现编译器错误“无法实例化抽象类”。
class BASE
{
public:
BASE() = default;
~BASE() = default;
virtual void f(){}
};
class INTERFACE
{
public:
virtual void f() = 0;
};
class DERIVED :
public INTERFACE, public BASE
{
public:
DERIVED() = default;
~DERIVED() = default;
};
BASE 类不知道 INTERFACE,它是库的一部分,我无法更改它。 我读了一些类似的问题,但我找不到关于如何解决这个问题的明确答案。我需要的是能够实例化 DERIVED 并能够在 DERIVED 中以及当我通过 INTERFACE 访问它时使用来自 BASE 的 f()。
【问题讨论】:
-
你需要在
DERIVED中编写函数f(),在其实现中可能会调用BASE::f()。 -
DERIVED 应该加上
void f(){BASE::f();}; -
godbolt.org/z/Wh8obj84n 实际上编译器的错误是直截了当的..
because the following virtual functions are pure within 'DERIVED': 'virtual void INTERFACE::f()'
标签: c++ inheritance interface abstract-class