illegal access declaration: 'class1' is not a direct base of 'class2'
The specified class or structure (class2) contained an access declaration for a member of a class or structure (class1) that was not a direct base.
To change the access to a member of an indirect base class, use its qualified name in the public or protected part of the derived class declaration. The qualified name must specify a direct base class.
The following is an example of this error:
struct A
{
int a, a2;
};
struct B : A {};
struct C : B
{
A::a2; // error, A is not a direct base
B::a; // OK, qualified name specifies a direct base
};