Like a function prototype, a forward declaration of a class declares its class name without it definition. Hence the name can be used with any undereferenced pointers or references before its definition. With forward declaration, you unleash the power of circular relationships between header files in your lib without going for circular dependecies that the compile really screams about.
For when you can help it, please stay away from circular dependecies between modules though those between classes can be torelable.
Hope i helped!
EDIT*: For dependecy management, check out
cinclude2dot which is a perl script which analyses C/C++ code and produces a #include dependency graph, and
makedep which is a C/C++ dependecy generator.