The approved way to declare two structs each of which has a member that is a pointer to the other type of struct, is: struct a; struct b { struct *a; }; struct a { struct *b; }; Yes, I know it looks unbelievable. This kludge is present precisely to handle this kind of problem.