Consider this classic example used to explain what not to do with forward declarations:
//in Handle.h file class Body; class Handle { public:
Without proper declaration of Body the code in Handle.h does not know whether destructor is virtual or even accessible (i.e. public).
Body
Handle.h
virtual