in your maingame section i would use the default case to output an error message, but even if you don't want to show an error message it's not neccesary to again set the bool to false as nothing has changed since it was initialised.
Conversely you will need to set the bool to true in the other valid case outcomes to break the loop, and don't forget to again set as false after you exit the loop so you can get back in to it in future.
also since you are explicitly using a bool:
Code:
while(!validSelection)
is preferred to:
Code:
while(validSelection != true )
Consider using a little gotoXY() function (you can find one in the FAQ section) to control your display output rather than using the CLS calls so much. As your game develops it will be a lot more useful and look better too.
You have defined a constructor for the character class, you should take advantage of this and use it to guarantee correctly initialised member variables or call member functions to do it.
You use a function SetValues() to set the health and magic points but then have individual 'Get..()' functions for them, i would use a single set() and get(), then you could just do something like:
Code:
enum STATUS_VAL { //in a header
MAGIC,
HEALTH,
STAMINA,
STRANGENESS,
CHARM,
};
outValue = player.GetValue(MAGIC);
And use a switch in your GetValue() function implementation to select the appropriate value to return.