прямое объявление генерирует несовместимую ошибку типа

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

#ifndef CLASSA_H_
#define CLASSA_H_

class B;

class A {

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

};

Компилятор говорит:A.h:23: error: field ‘_b1’ has incomplete type

Я заметил, что если я сделаю_b1 типаB* проблема решена.

Так является ли прямое объявление хорошим только для типов указателей?
Если я хочуA держатьB возражать, я должен#inlcude "B.h" ?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос