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;
};