Прототип класса... Предварительное объявление?

У меня есть два класса ссылающихся друг на друга, соответственно в таком виде компилятор ругается.
А как правильно?

class A 
{
    public:
       void func_A () 
       {
         b.func_B();
       }
} a; 

class B
{
    public:
       void func_B () 
       {
         
       }
} b;

обьявление в .h файл, определение в .cpp

а в одном файле не получится?

можно и в одном.
Разделите обьявление и определение методов.

class B;
class A
{
  public:

    A() {};
    void func_A (B* b);

};

class B
{
  public:
    B() {}
    void func_B (A* a);
} ;

void A::func_A (B* b)
{
  b->func_B(this);
}
void B::func_B (A* a)
{
  a->func_A(this);
}

A a;
B b;

Вот это вот у вас сразу неправильно:

У вас определение метода класса A работает с конкретным экземпляром класса B ? - так не делается

Ну чаще всего да.

Спасибо!

Все равно лучше написать в общем виде, а конкретный экземпляр передавать по указателю

как то вот ненужно было, пойду читать)