Проблема в том, что вы используете (вызываете) некоторые из своих функций перед тем, как определить или объявить их (GiveItem
и RemovetItem
в LevelObject::Interact
). Однако вы не можете определить эти функции до того, как определили / объявили структуру Player
!
Чтобы обойти эту проблему, вы можете предоставить прототипов функций - это «пустые» объявления функций, которые просто указывают их «форму» (или подписи ). Поместите их в верхнюю часть кода (рекомендуется делать это для всех функций, даже если эти предварительные объявления не являются строго необходимыми). Вот типичный способ сделать это:
// -----------------------------------------Prototypes------------------------------------------//
void RemoveItem(string ItemName2);
bool ItemCheck(string ItemName1);
void TakeItem(string ItemName0);
void GiveItem(string ItemName);
void ColorText(std::string Text0, int Color, bool endl);
void inventory();
//-------------------------------------------Virables-------------------------------------------//
У вас также есть проблема в вашей функции ItemCheck
, когда ваша строка bool T_F = true;
внутри for
l oop объявляет new переменная T_F
, которая «скрывает» (и заменяет) переменную с тем же именем, объявленным в области действия уровня функции. Удалите bool
из этой строки, чтобы установить значение переменной уровня функции:
bool ItemCheck(string ItemName1)
{
bool T_F = false;
for (int i = 0; i < 20;) {
if (player.inv[i].name == ItemName1) {
T_F = true;// "bool = T_F = true"; hides (replaces) the other T_F variable!
break;
}
i++;
}
return T_F;
}
Кроме того, для получения хороших рекомендаций по кодированию прочитайте это: Почему "используется пространство имен std ;» считается плохой практикой? .