http://d.hatena.ne.jp/fkm/20060414/p1
A.hが(間接的にでも)B.hをincludeしていると、B.hからA.hをinclude仕様としても#ifndef A_H みたいなのに引っかかってincludeできません。ちなみにinclude guardをはずすと無限にincludeしあいます。
Javaのパッケージが循環参照しているとイケナイように、C/C++もファイル間で循環参照させてはいけません。
基本的に不完全型(class Hoge; みたいなの)やpImplを利用して、出来るだけincludeを減らすように努力しましょう。