Why does one of my declarations produce an error, while its twin works fine?

If you don’t need the implementation of the class inside the header files then forward declarations rather than #includes will keep your compile times down.

I am not saying it always is. There are times where classes depend each other. When such a thing is needed forward declaration comes in as a solution.

Your game, your needs. I can never tell you what to do, nor i can know what is right. It is your choice.