Come posso fare per permettere a due file di includersi a vicenda?

Faccio un esempio così mi spiego:

Ho due classi A e B, dichiarate rispettivamente dentro a A.h e B.h.
Sia A che B hanno al loro interno un puntatore ad una variabile del tipo dell'altra classe.

A.h
codice:
#ifndef A_H
#define A_H

#include"B.h"

class A{
      B *b;
};

#endif
B.h
codice:
#ifndef B_H
#define B_H

#include"A.h"

class B{
      A *a;    
};    

#endif
Però questo non funziona e in un ipotetico main.cpp
codice:
#include"A.h"

int main(int argc, char *argv[]){
    A a();
    return 0;
}
Non mi riconosce il tipo A dentro a B.h.
Suppongo sia "colpa" dei #ifndef #define, tuttavia se non li metto i due file si includono a vicenda all'infinito e ovviamente non funziona.

Questo l'ho provato creando progetti sia con Dev-C++ sia con CodeBlocks.

Come si risolve in queste situazioni?
Grazie.