If you need member functions of the classes to access members of the "other
type", you'll need to define your class implementation outside the class
A "forward declaration" (or "incomplete class declaration" in standardese)
allows you to refer to a class in contexts that don't require knowing the
size or interface of a class (such as declaring a pointer or reference
variable or parameter). In order to declare a variable of the class type,
or access any members of the class, a complete class is required.
Between forward declarations and out of line member definitions, you should
be able to handle any sensible mutual dependency.