【发布时间】:2020-08-19 20:15:05
【问题描述】:
我可以这样做吗?
class A {
public:
virtual void aFoo() = 0;
};
class B : virtual public A {
public:
virtual void aFoo() { ... }
};
class D : public A {};
class C : public B, virtual public D {};
问题在于B 中aFoo() 的实现以及C 中缺少它。在编译时,我看到了这个错误:
error: no unique final overrider for ‘virtual void A::aFoo()’ in ‘C’
不应该可以覆盖B中虚基类的纯虚方法吗?
刚刚编辑了示例以匹配实际用例。现在以这种简化的方式来看它,我不太确定这是否可能,更不用说好的设计了。
【问题讨论】:
-
如果 B 已经从 A 继承,则不应从 A 和 B 继承。那是错误的。正如错误消息所说,您必须从 A 覆盖 Foo,因为您直接从它继承。 (假设缺少代码的顶级类是 A 类)
-
我明白了,我在示例中犯了一个错误。 C 应该实现另一种类型 D,它再次虚拟地继承 A。我会解决这个问题,对于这里的混乱,我深表歉意。
-
哪个编译器给你这个错误?没关系here
-
托马斯,感谢您的链接。我的问题更多是关于钻石问题中纯虚函数的使用。恐怕那里的答案并不能提供任何关于此的信息。
标签: c++ overriding multiple-inheritance virtual-functions virtual-inheritance