like this code
class Try
{
public:
Try() = default;
int i = 0;
};
class B1 : private Try
{
public:
B1() = default;
using Try::Try();
using Try::i;
};
class C1 : public B1
{
public:
Try a; //tell me:'Try' is a private member of 'Try'
void print()
{std::cout << i << std::endl;}
//Access to this I is allowed;
};
the Try a is a local object , not a part of C1, why error?
As long as it is a direct base class of private inheritance, can it not be possible to define an indirect base class object in its derived class? Is it because the constructor cannot be used or is it for other reasons?
By writing
Try a;in the context of classC1, the name lookup will generally always scan from local to global scope. The first match thus will beB1::Try, which is, due to the private inheritance, inaccessible forC1.The fix is easy, just hint the compiler the name you "really" mean, i.e. by writing e.g.
::Try a;.