You seem to have a misunderstanding of how classes work. You should review the syntax and what it means. The problem is that you are re-declaring hp and trying to initialize it in the class (which is illegal for non-static members).
This is a description of a new kind of object. You're explaining to the compiler that three's this new kind of object, called a "player". It contains two integers, one of them is called hp and the other integer is called atk.
It does NOT actually make one of these objects. It just explains to the comp[iler HOW to make one. So when you say this:
int hp = 10;
where is the compiler supposed to store that value? Where can it store the number 10? Given that it has NOT created any new objects, has NOT allocated any memory. This is a description of HOW to make this new kind of object, but it does not actually make one.
Edit: I stand corrected in the land of C++ 11. I really need to sit down with the spec and read it all the way through.
Non-static data member initialization is a C++11 feature, which compiler are you using ? You need at least GCC 4.7 for this feature ( http://gcc.gnu.org/gcc-4.7/cxx0x_status.html ). If you are using Visual Studio you'll have better odds with the newest version.