Данный код в классе Race считает target необъявленным идентификатором. Исправь его,сделав класс Race вложенным в класс Character. Код: class Race {
protected:
string race;//Название расы
string ability;//название способности
int racephysicalvalue;//Бонус к физ урону
int racemagicvalue;//Бонус к маг урону
int racehpvalue;//Бонус к hp
int racempvalue;//Бонус к mp
public:
Race(const string& race, const string& ability, int racephysicalvalue, int racemagicvalue, int racehpvalue, int racempvalue)
: race(race), ability(ability), racephysicalvalue(racephysicalvalue), racemagicvalue(racemagicvalue), racehpvalue(racehpvalue), racempvalue(racempvalue) {}

string getrace() {
return race;
}

string getability() {
return ability;
}

virtual void useraceability(Character* target) = 0;

int getrpv() {
return racephysicalvalue;
}

int getrmv() {
return racemagicvalue;
}

int getrhp() {
return racehpvalue;
}

int getrmp() {
return racempvalue;
}
virtual ~Race() {}
};

class Human :public Race {
public:
Human(): Race(“Человек”,“”,0,0,0,0) {}
void useraceability(Character* target) override {}
~Human(){}
};

class Orc :public Race {
public:
Orc(): Race(“Орк”, “Исступление”, 5, -10, 20, -10) {}

void useraceability(Character* target) override {
target->takeDamage(10);
target->attackbonus = 5;
}

~Orc(){}
};

class Elf :public Race {
public:
Elf() : Race(“Эльф”, “Восстановление маны”, 0, 10, -10, 10) {}

void useraceability(Character* target) override {
target->restoreMana(20 + racemagicvalue);
}

~Elf(){}
};

class Undead :public Race {
public:
Undead() : Race(“Нежить”, “Восстановление “, -5, 5, -20,5 ) {}

void useraceability(Character* target) override {

}

~Undead(){}
};

class Demon :public Race {
public:
Demon() : Race(“Демон”, “Огненная плеть”, 10, -5, 0, -5) {}

void useraceability(Character* target) {

}

~Demon(){}
};
//Место для класса trait

class Character {
protected:
string name;
Race* race;
string specialization;
string trait;//Черты + изъяны
int hp;
int mp;
public:
Character(const string& name, Race* race, const string& specialization, const string& trait, int maxhp, int maxmp)
: name(name), race(race), specialization(specialization), trait(trait), hp(maxhp+race->getrhp()), mp(maxmp+race->getrmp()) {}

int maxhp = hp;
int maxmp = mp;
int attackbonus = 0;
virtual void useAbility(Character* target) = 0;

virtual void useAbility(Mob* target) = 0;

bool isalive() {
return hp >= 0;
}

void status() {
cout << “Имя: " << getName() << endl;
cout << “Раса: " << race->getrace() << endl;
cout << “Класс: " << specialization << endl;
cout << “Черта: " << trait << endl;
cout << “HP: " << hp << “/” << maxhp << endl;
cout << “MP: " << mp << “/” << maxmp << endl;
}

virtual void attack(Character* target) = 0;

virtual void attack(Mob* target) = 0;

void takeDamage(int damage) {
hp -= damage;
cout << name << " получает " << damage << " урона” << endl;
}

void restoreHealth(int amount) {
if (!isalive())
return;
if (hp + amount > maxhp)
hp = maxhp;
else
hp += amount;
cout << name << " восстанавливает " << amount << " здоровья” << endl;
}

void useMana(int amount) {
mp -= amount;
cout << name << " использует " << amount << " маны” << endl;
}

void restoreMana(int amount) {
if (!isalive())
return;
if (mp + amount > maxmp)
mp = maxmp;
else
mp += amount+race->getrmp();
cout << name << " восполняет " << amount << " маны” << endl;
}

string getName(){
if (!isalive())
return name + “(мёртв)”;
return name;
}

virtual ~Character(){}
};