#include <iostream>
using namespace std;
class A { public: void eat(){ cout<<"A";} };
class B: public A { public: void eat(){ cout<<"B";} };
class C: public A { public: void eat(){ cout<<"C";} };
class D: public B,C { public: void eat(){ cout<<"D";} };
int main(){
A *a = new D();
a->eat();
}
我不确定这是否称为钻石问题,但为什么这不起作用?
我已经给出了 for 的eat()
定义D
。所以,它不需要使用B
's 或C
' 副本(所以,应该没有问题)。
当我说a->eat()
(记住eat()
不是虚拟的)时,只有一种可以eat()
调用,即A
.
那么,为什么我会收到此错误:
'A' 是 'D' 的模棱两可的基础
A *a = new D();
对编译器到底意味着什么?
和
为什么我使用时不会出现同样的问题D *d = new D();
?