Once you have added inclusion guards you may well find the code not compiling because of undefined symbols on your classes.
class A can not use to class B in its definition if class B uses class A in its definition.
However class A can use a reference(or pointer) to class B in its definition even if class B uses class A in its definition.
If can do this using a forward declaration. A forward declaration looks something like this
It tells the compiler that class B is going to be defined at some future time. This is enough to allow the compiler to create pointers and references to class B but not enough to access the members of class B.
In the situation I have described the forward declaration to B would be put in the class A header and the class A header would just be included into the class B header.