【发布时间】:2020-08-12 08:14:26
【问题描述】:
为什么这个简单的类层次结构最终会出现在抽象类 B 中?在这种情况下,我不知道要搜索的流行词。 (也许是钻石问题?)
class I_A
{
virtual void foo() = 0;
};
class I_B : public I_A
{
virtual void bar() = 0;
};
class A : public I_A
{
void foo() override {}
};
class B: public A, public I_B
{
void bar() override {}
};
B b; ///< Compiler says it is abstract
【问题讨论】:
-
有错误信息吗?
-
流行语是“钻石问题”。相关/欺骗:How does virtual inheritance solve the “diamond” (multiple inheritance) ambiguity?。一般来说,你继承
I_A两次,你有A::I_A::foo()的定义,但没有I_B::I_A::foo()的定义。 -
@Yksisarvinen 你说得对,钻石描述了我遇到的问题。我在纸上画的略有不同,所以我没有意识到。