Yeah, I don't see a fancy way of avoiding that problem in this case... so void* is pretty much all that's left.
I think I'd use a void pointer (like void * pParentRoom;) in the OBJECT struct since it's probably not being used as much as the pointer for the other direction. And everytime I want to access it I'd just quickly cast it:
ROOM * pRoom = object->pParentRoom;
pRoom->...But that's probably how you're doing it already so...