In C ++, it does not make much sense to introduce name aliases for structures in this way, since in C ++ you can refer to a structure by its name without the keyword struct . This makes sense only in C, but in C there are no constructors for structures. Therefore, it is not clear what you are trying to achieve.
But even if you write it so that the code is compiled, such as
typedef struct AA; typedef struct BB; struct A { A( B ); }; struct B { B( A ); }; A::A( B ) { /*...*/ } B::B( A ) { /(...(/ }
However, you cannot create any objects of these structures, since you have a cyclic dependency of constructor calls.
Therefore, in order for the code to make sense, you need to add an additional constructor to at least one of the structures, which does not depend on the object of another class in order to avoid the cyclic dependence of constructor calls.