la declaración de reenvío genera un error de tipo incompatible

He estado leyendo algunas declaraciones a futuro, incluso en este foro. Todos dicen que nos salva de incluir el archivo de encabezado. Sin embargo, el siguiente código genera un error:

#ifndef CLASSA_H_
#define CLASSA_H_

class B;

class A {

public:
    A();
    ~A();
    int getCount();
private:
    static int _count;
    int _num;
    B _b1;   //ERROR

};

el compilador dice:A.h:23: error: field ‘_b1’ has incomplete type

Me di cuenta de que si hago_b1 de tipoB* el problema esta resuelto.

Entonces, ¿la declaración directa es válida solo para los tipos de puntero?
Si lo quieroA sostenerB objetar tengo que#inlcude "B.h" ?

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta