Błąd w kompilacji - funkcje nie zadeklarowane

0

Witam. Napisałem prostą gierkę oto kod:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
using namespace std;
class warrior
{
public:
int hp;
int gethp1(warrior d);

void sethp1(warrior c,int b);
bool elive(warrior c);
warrior(int a)
{
	hp=a;
}

};
int warrior::gethp1(warrior d)
{
cout<<d.hp<<endl;
}
void warrior::sethp1(warrior c,int b)
{
c.hp-=b;
}
bool warrior::elive(warrior c)
{
if(c.hp>0)
return 1;
else
return 0;
}
class fighter
{
public:
int hp;
int gethp2(fighter w);
void sethp2(fighter m, int r);
bool alive(fighter m);
fighter(int b)
{
hp=b;
}
};
int fighter::gethp2(fighter w)
{
cout<<w.hp<<endl;
}
void fighter::sethp2(fighter m,int r)
{
m.hp-=r;
}
bool fighter::alive(fighter m)
{
if(m.hp>0)
return 1;
else
return 0;
}
int main()
{
int f,d;
warrior sworder(f);
fighter axer(d);
int attack,damage;
srand(time(NULL));
cout<<"Wpisz ilosc zycia bohaterow:"<<endl;
cin>>f;
d=f;
do{
if((elive(sworder))==1)
{

cout<<"Atakuje gracz sworder"<<endl;
cout<<"Wybierz atak(wpisz 1 lub 2):"<<endl;
cout<<"1-Atak lekki ale trafia czesto"<<endl;
cout<<"2-Atak mocny ale trafia rzadko"<<endl;
cin>>attack;
if(attack==1)
{

switch((rand()%2)+1)
{
	case 1:
		damage=20;
		break;
	case 2:
		damage=0;
		break;	
		
}
sethp2(axer,damage);

}
else if(attack==2)
{
switch((rand()%4)+1)
{
case 1:
damage=50;
break;
case 2:
damage=0;
break;
case 3:
damage=0;
break;
case 4:
damage=0;
break;
}
sethp2(axer,damage);
}
}
else {
cout<<"Wygrywa gracz axer"<<endl;
break;
}
if((alive(axer))=1)
{

cout<<"Atakuje gracz axer"<<endl;
cout<<"Wybierz atak(wpisz 1 lub 2):"<<endl;
cout<<"1-Atak lekki ale trafia czesto"<<endl;
cout<<"2-Atak mocny ale trafia rzadko"<<endl;
cin>>attack;
if(attack==1)
{

switch((rand()%2)+1)
{
	case 1:
		damage=20;
		break;
	case 2:
		damage=0;
		break;	
		
}
sethp1(sworder,damage);

}
else if(attack==2)
{
switch((rand()%4)+1)
{
case 1:
damage=50;
break;
case 2:
damage=0;
break;
case 3:
damage=0;
break;
case 4:
damage=0;
break;
}
sethp1(sworder,damage);

}
}
else
{
cout<<"wygrywa gracz sworder"<<endl;
break;
}
cout<<"Liczba żyć sworder:"<<gethp1(sworder)<<endl;
cout<<"Liczba żyć sworder:"<<gethp2(axer)<<endl;

}while(1);
cout<<"Koniec gry"<<endl;
}

Niestety przy kompilacji wyskakuje ten sam błąd do wszystkich funkcji użytych w main : "sethp1" wasn't declared in this scope
Nie wiem czemu przecież funkcje są zadeklarowane i zdefiniowane przed użyciem w main. Proszę o pomoc.

3
  1. Wstaw znaczniki code
  2. Funkcja sethp1 jest metodą klasy warrior i żeby ją wywołać, musisz mieć obiekt tej klasy, np
warrior warrior1(0);
warrior1.sethp1(...)

więc zamiast sethp1(sworder,damage); ma być sworder.sethp1(damage);

    int f,d;
    warrior sworder(f);
    fighter axer(d);

w pierwszej linijce tworzysz 2 zmienne typu int, kóre przechowują śmieci (bo nie przypisałeś im zadnych wartości, wiec możemy założyć ze f=57; d=-749)
w drugiej i trzeciej linijce deklarujesz 2 obiekty przekazując im te śmieci... gdzie tu logika?

1 użytkowników online, w tym zalogowanych: 0, gości: 1