我想一些幫助解釋這個phenomenom:爲什麼這段代碼不起作用? (C++ OOP)公共繼承
#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之間有什麼區別 - 爲什麼一個拋出一個編譯錯誤,而另一個不是?
http://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem – Pubby
它不適用於此,否則Row27也不起作用!第27行和第28行有什麼區別? – YoniXw
你使用什麼編譯器?第27行不會在這裏編譯 –