Используйте предварительные декларации, где вы можете. Если объявление класса использует только указатель или ссылку на тип, вы можете просто объявить его и включить заголовок для типа в файл реализации.
Например:
// T.h
class Class2; // Forward declaration
class T {
public:
void doSomething(Class2 &c2);
private:
Class2 *m_Class2Ptr;
};
// T.cpp
#include "Class2.h"
void Class2::doSomething(Class2 &c2) {
// Whatever you want here
}
Меньшее количество включает в себя гораздо меньше работы препроцессора, если вы делаете это достаточно.