The primary reasons to put a type into a class/struct is for template metaprogramming, or if the type is private to the class. Otherwise, just put it next to the class:
// Player.hpp
...
enum class PlayerState { RUN, WALK, STAND };
class Player {
public:
...
private:
PlayerState m_state;
};
In C++, it is common that you will have some helper declarations for a class. So it is not reasonable to enforce a one declaration per header policy.
Putting this declaration in a separate file can be sensible if the PlayerState is used separately from the Player. But given these names, that's unlikely to be the case.
Separate headers are especially helpful when the header needs to include additional headers for some declarations. Because C++ (currently) has no module systems, the contents of those headers also become available to whoever includes the header you are writing – an impact we would like to minimize. An alternative solution to these header dependencies is to abstract over details of your class definitions, e.g. using polymorphism (the header declares only an interface whereas the implementation classes are internal to a .cpp file), or using the pImpl idiom.