Предположим, ситуация.Повторное наследование. Неограниченный
struct Top
{
int x;
};
struct Left : public Top
{};
struct Right : public Top
{};
struct Bottom : public Left, public Right
{
void foo()
{
Left::x; // Normal compiled
}
void goo()
{
Left::Top::x; // error: ‘Top’ is an ambiguous base of ‘Bottom’ // Why --- ????
}
};
Может ли кто-нибудь объяснить мне, почему в функции goo() компилятор дает ошибку неоднозначности?
Я написал void foo(), чтобы показать, что если я получаю x от классификатора Left :: x; нет никакой двусмысленности, поэтому почему, когда я использую более подробный классификатор доступа Left :: Top :: x; появляется двусмысленность?
Кстати, я пробовал этот код в visual studio 2012 (настройки компилятора по умолчанию) и скомпилировал его. Но gcc - 4.6 (ubuntu) дает эту ошибку. Так как я понимаю, что это проблема gcc-4.6, или ??? Я не знаю, если кто-то что-то знает об этом, напишите ответ. –