incomplete type error

c++, forward-declaration, friend

Solution

No, that's a forward declaration and does not define a full type. You'll need to have a full definition of `B` before `A`, if you want to keep the member as an object and not pointer.

One of the reason for this is that the size of the class `B` must be known to `A`, since `A`'s size depends on `B`.

I suggest you `#include "B.h"` in `A.h`.

EDIT: clarification:

struct A;

struct B
{
   A foo();
   void foo(A);
   void foo(A&);
   void foo(A*);

   A* _a;
   A& __a;
   A a;  // <--- only error here
};

Problem

Im trying to make class A a friend of class B. ``` class B; class A{ public: void show(const B&); // ##1## but this one works fine B ob;// error incomplete type }; class B{ public: int b; B():b(1){} friend class A; }; ``` so my question why it's incomplete type? I thought that when I did `class B` it's like a prototype of a function which tell the compile there is a definition somewhere in the code. also in the code above at ##1## why this is possible ?

Original source