Okay, I tried using pointers and references. Both give the same error. Switching the order of the declarations doesn't help.
Code:class A { public: A(class B *b) : _b(b) { _b->func(); // invalid use of incomplete type 'struct B' } void func() {} private: class B *_b; }; class B { public: B(class A *a) : _a(a) { _a->func(); } void func() {} private: class A *_a; };