Так выглядит declaration класса:
class Player {
private:
int health;
int strength;
int agility;
public:
void move();
void attackMonster();
void getTreasure();
};
Т.е. это просто описание интерфейса класса.
Понятное дело, что оно должно присутствовать в файлах ОДИН раз, но в каждом cpp, где этот класс используется. Поэтому определение класса выносят в h-шник.
Если же у Вас определение класса есть и в h-файле, и во включающем его cpp-файле, то естественно, что компилятор заругается. Поэтому если Вы собираетесь использовать этот класс в нескольких файлах, то разумно в cpp-файл вынести исключительно реализацию функций-членов (т.е. function definition). Т.е. в cpp-файле будет:
#include <player.h> // наш h-файл
void Player::move
{
// код ф-ции
}
void Player::attackMonster()
{
// код ф-ции
}
void Player::getTreasure()
{
// код ф-ции
}
Шаблонные классы вместе со своими ф-циями удобно целиком описывать в h-нике. Все равно они потом будут подставляться по месту использования компилятором.
Ну, и не забывайте в своих h-файлах делать блоки защиты от повторного включения:
#ifndef MY_SYMBOL_H
#define MY_SYMBOL_H
// здесь идет собственно тело h-ника
#endif //MY_SYMBOL_H