Вам нужно будет использовать предварительное объявление как минимум для одного класса:
foo.h:
#include "Bar.h"
class Foo {
};
bar.h:
class Bar;
#include "Foo.h"
class Bar {
};
Также помните, что вы не можете легко ссылаться на членов Bar в Foo.h (они не объявлены). Таким образом, любые зарегистрированные участники, которым нужен Bar, должны будут зайти в Foo.cpp (или .cc, если вы предпочитаете). Вы также не можете иметь Bar в качестве ценностного члена Foo.
Итак:
class Bar {
Foo f; // OK. Compiler knows layout of Foo.
};
class Foo {
Bar b; // Nope. Compiler error, details of Bar's memory layout not known.
Bar *b; // Still OK.
};
Это особенно сложно для шаблонов. См. FAQ , если у вас возникли проблемы.