我有以下接口(interface) A:
class A
{
virtual void f() = 0;
}
我还有从 A 派生的接口(interface) B、C:
class B : public A
{
...
}
class C : public A
{
...
}
类 X 实现 B,Y 实现 C。它们都派生自类 D
class X : public D, public B {...}
class Y : public D, public C {...}
这两个类都具有相同的 A::f() 实现,因此我将此实现移至 D。现在,当我尝试实例化 X 或 Y 时,我收到一个错误,指出未为它们实现 f()。
看起来虽然在基类中实现了同样的方法,但是编译器并没有将其识别为纯虚函数的实现。我应该怎么办?
最佳答案
D::f()
的实现对A::f()
一无所知。您必须从 A
派生 D
(以及从 D
派生 B
和 C
) 或在 X
和 Y
中实现 f()
。实现可能非常简单 - 只是调用 D
中的函数(但不要调用它 D::f()
以避免歧义)。
编辑:(添加信息)
不过,如果您可以在类之间自由移动此函数,我什至不确定它是否必须是方法,而不是辅助函数。
关于c++ - 未实现的纯虚方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203988/