declaração direta gera erro de tipo incompatível

Eu tenho lido alguns sobre declarações avançadas, incluindo neste fórum. Todos dizem que isso nos impede de incluir o arquivo de cabeçalho. No entanto, o código a seguir gera um erro:

#ifndef CLASSA_H_
#define CLASSA_H_

class B;

class A {

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

};

O compilador diz:A.h:23: error: field ‘_b1’ has incomplete type

Notei que se eu fizer_b1 do tipoB* o problema está resolvido.

Portanto, a declaração direta é válida apenas para tipos de ponteiros?
Se eu quiserA segurarB objeto que eu tenho que#inlcude "B.h" ?

obrigado!

questionAnswers(4)

yourAnswerToTheQuestion