Search code examples
c++classfriendfriend-function

c++ class function friend to another class


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;
}

Image


Solution

  • 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.