There's a reason most of us wrap header files in multiple inclusion protection #ifdef/#define wrappers. Current compilers are also smart enough to automatically avoid multiple inclusion given the right flag.
Doesn't fix circular dependency loops though.
You've not experienced the true horror of dependency hell till you've used C++ templates ;)