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 ?
No, that's a forward declaration and does not define a full type. You'll need to have a full definition of
B
beforeA
, 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 toA
, sinceA
's size depends onB
.I suggest you
#include "B.h"
inA.h
.EDIT: clarification: