enum Alignment { good, bad };
Объявляет тип с именем Alignment
, а не переменную. Ваша строка
Alignment = // HERE
будет пытаться присвоить значение типу, что не имеет смысла.
Вам понадобится что-то вроде этого:
enum Alignment { good, bad };
Alignment myAlignment = good;
Я действительно предпочитаю использовать перечисления с областью видимости вот так:
enum class Alignment { good, bad };
Aligmnent myAlignment = Alignment::good;
Они ' функционально эквивалентен, но последний дает компилятору некоторые подсказки, которые могут отлавливать ошибки кодирования во время компиляции.
Примечание: обратите внимание, что в вашем сообщении слово Alignment
отображается в сине-зеленом цвете, зарезервированном для типов.
Применение этого к определению вашего класса:
class Player {
public:
int health = 100;
int weapon = 1;
int lvl = 0;
Player(bool hero) {
if (hero) {
// health; THESE LINES DO NOTHING BUT GENERATE A WARNING.
// weapon;
} else {
health = 1;
}
}
// Alignment is a nested type that can be referred to as Player::Alignment.
enum class Alignment { good, bad };
Alignment playerAlignment = Alignment::good;
void attack(Enemy &e);
friend class Enemy;
};
И позже ...
if (gameBoard[positionX][positionY] == gameBoard[0][4]) {
cout << "\nWell Of Reflection\n" << endl;
cout << "You increases your XP by 2" << endl;
p.lvl += 2;
cout << "Total XP: " << p.lvl << endl;
p.playerAlignment = Player::Alignment::bad;
}
Или, если вы хотите отобразить выравнивание игрока:
std::string to_string(Player::Alignment alignment)
{
switch(alignment)
{
case Player::Alignment::good:
return "good";
case Player::Alignment::bad:
return "bad";
}
return "Unknown alignment";
}
И в других местах, когда вы хотите использовать это:
cout << "Alignment: " << to_string(p.playerAlignment) << endl;