I'm trying to specify a class member function as a friend of another class, but it gives me only access to the public members not the protected or private members. It's working fine with free functions.
Visual Studio Errors:
member "Class1::protected_int" (declared at line 9) is inaccessible
member "Class1::private_int" (declared at line 11) is inaccessible
class Class2;
class Class1 {
friend void Class2::TEST(const Class1& ex);
friend void TEST(const Class1& ex);
public:
int public_int;
protected:
int protected_int;
private:
int private_int;
};
class Class2{
public:
void TEST(const Class1& ex);
};
void Class2::TEST(const Class1& ex){
int pub = ex.public_int;
int pro = ex.protected_int;
int pri = ex.private_int;
}
void TEST(const Class1& ex){
int pub = ex.public_int;
int pro = ex.protected_int;
int pri = ex.private_int;
}
The program is already ill-formed here:
friend void Class2::TEST(const Class1& ex);
Class2
is incomplete, so you cannot access members of it yet. If you reorder your code such that everything is complete when it needs to be:
class Class1;
class Class2{
public:
void TEST(const Class1& ex);
};
class Class1{
friend void Class2::TEST(const Class1& ex);
friend void TEST(const Class1& ex);
// ...
};
then everything compiles fine.