Один из них должен обойти, чтобы не включать его. Во многих случаях это возможно, так что вы можете переместить #include в файл .cpp
class A {
// no need for header of B here
void f(B b);
// no need for header of B here either
B *b;
};
Как правило, для объявлений функций, определения которых находятся в файлах .cpp, вам не нужно включать #include в заголовок. Для членов класса заголовки нужны только в том случае, если вы хотите, чтобы они были встроены в качестве объектов-значений. Вам необходимо изменить их на указатели (или умные указатели) и new
в этом случае в файле .cpp. Чтобы компилятор знал, что такое B
в моем примере выше, вам просто нужно поместить предварительное объявление перед определением A
, например:
class B;