我需要一些帮助来解释这种现象:
#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 之间有什么区别 - 为什么一个抛出编译错误而另一个没有?