Алмаз смерти и оператор разрешения области (с ++)
У меня есть этот код (проблема с бриллиантом):
#include <iostream>
using namespace std;
struct Top
{
void print() { cout << "Top::print()" << endl; }
};
struct Right : Top
{
void print() { cout << "Right::print()" << endl; }
};
struct Left : Top
{
void print() { cout << "Left::print()" << endl; }
};
struct Bottom: Right, Left{};
int main()
{
Bottom b;
b.Right::Top::print();
}
Я хочу позвонитьprint()
вTop
учебный класс.
Когда я пытаюсь скомпилировать его, я получаю сообщение об ошибке:'Top' is an ambiguous base of 'Bottom'
на этой линии:b.Right::Top::print();
Почему это неоднозначно? Я явно указал, что я хочуTop
отRight
а не изLeft
.
Я не хочу знать, КАК это сделать, да, это можно сделать с помощью ссылок, виртуального наследования и т. Д. Я просто хочу знать, почемуb.Right::Top::print();
неоднозначный.