Собственно, обычно на самом деле нет необходимости включать заголовки друг в друга.
// file1.h
#include "file2.h"
// file2.h
#include "file1.h"
Так, конечно, не будет работать, но это и не требуется.
// file1.h
#include "file2.h"
// file2.cpp
#include "file1.h"
Так и соблюдаются необходимые связи, и не возникает конфликта. Разумеется, если использован include guard.