#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();
}
これがダイヤモンド問題と呼ばれるかどうかはわかりませんが、なぜこれがうまくいかないのですか?
eat()
forの定義を与えましたD
。B
したがって、やのコピーを使用する必要はありませんC
(したがって、問題はないはずです)。
私が言ったとき、a->eat()
(remembereat()
は virtual ではないことを思い出してください)、eat()
呼び出すことができるのは の 1 つだけですA
。
では、なぜこのエラーが発生するのでしょうか。
「A」は「D」のあいまいなベースです
A *a = new D();
コンパイラにとって正確にはどういう意味ですか??
と
を使用すると同じ問題が発生しないのはなぜD *d = new D();
ですか?