この現象を説明する助けが必要です。
#include <iostream>
using namespace std;
class A
{
public:
void m() {cout<<"A::m "<<this<<endl;};
};
class B1: public A
{
public:
void m() {cout<<"B::m "<<this<<endl;};
};
class B2: public A ,public B1
{
};
class D : public B2
{};
int main()
{
B2 b;
D d;
A* a = &b; // Row 27
//error: a = &d; Base class 'A' is ambiguous // Row 28
return 0;
}
Row27 のコードは機能するのに、Row28 のコードは機能しないのはなぜですか? 少し早いですがお礼を!
注:私は仮想継承をよく知っています.Row27とRow28の違いを知りたいだけです-一方がコンパイルエラーをスローするのに、もう一方がスローしないのはなぜですか?