Предупреждение о спойлере: Может быть, глупый вопрос.:)
#include <iostream>
using namespace std;
class Base
{
public:
virtual void YourMethod(int) const = 0;
};
class Intermediate : private Base
{
public:
virtual void YourMethod(int i) const
{
cout << "Calling from Intermediate" << i << "\n";
}
};
class Derived : private Intermediate, public Base
{
public:
void YourMethod(int i) const
{
cout << "Calling from Derived : " << i << "\n";
}
};
int main()
{
}
Может мне кто-то Объяснить, почему это выдает компилятор предупреждение:
main.cpp:21: warning: direct base ‘Base’ inaccessible in ‘Derived’ due to ambiguity
Теперь я понимаю, что этот код не будет работать. Я хочу знать, почему. Base
является закрытым для Intermediate
, поэтому он не должен быть видимым до Derived
через Intermediate
. Итак, откуда возникает двусмысленность? В конструкторе?