No, this declaration is forward and does not define the full type. You will need to have a full definition Bbefore Aif you want to save the element as an object, not a pointer.
One reason for this is that the size of the class Bmust be known A, since the size Adepends on B.
I suggest you #include "B.h"to A.h.
EDIT: :
struct A;
struct B
{
A foo();
void foo(A);
void foo(A&);
void foo(A*);
A* _a;
A& __a;
A a;
};