The myotherstruct identifier myotherstruct not a struct tag, it is a type name in its own rights. You use it without the struct keyword. Once defined, the name cannot be reused for the struct tag. In your example, you do not specify the type myotherstruct forward-declaring myotherstruct , you are forwarding a struct with the myotherstruct tag, which gives you an error, since the name myotherstruct has already been taken for typedef >.
source share