Search code examples
c++friend-function

Friend function - member is inaccessible


I'm taking a C++ course, and I came across something I can't wrap my head around. I've tried searching for an answer, but I've come up short.

class A {
    friend void C::dec(A&);
private:
    int field;
};

class C {
public:
    void dec(A& a);
};

void C::dec(A& a) { a.field--; } <-- member A::field is inaccessible

I am aware that for this to work, class A should be declared before, but defined after, class C. But I'm struggling to understand why.

So why is the class member A::field inaccessible when class A is defined before class C?


Solution

  • The problem is not the friend declaration, it's just C is unknown where you declare it in A.

    So you define C and forward declare A, then just define C as you already did.

    class A;
    
    class C {
    public:
        void dec(A& a);
    };
    
    class A {
        friend void C::dec(A&);
    private:
        int field;
    };
    
    
    void C::dec(A& a) { a.field--; }