У меня есть этот код (проблема с алмазами):
#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();
неоднозначно.