Witam serdecznie,
postanowiłem napisać swój pierwszy program obiektowy. Posiada on dwie klasy: Bohater oraz Potwor. Posiadają one po kilka atrybutów oraz funkcję atak, która w założeniu ma modyfikować atrybut należący do klasy przeciwnika (metoda bohatera ma modyfikować HP potwora i na odwrót). Napisałem coś takiego:
#include <iostream>
#include <string>
using namespace std;
class Bohater
{
public:
int sila;
string nazwa;
Bohater(string, int, int); //konstruktor
int HP;
void atak(Potwor *);
void unik();
};
class Potwor
{
public:
int sila;
string nazwa;
Potwor(string, int, int); //konstruktor
int HP;
void atak(Bohater *);
};
Bohater::Bohater(string n, int zycie, int s)
{
nazwa = n;
sila = s;
HP = zycie;
}
void Bohater::atak(Potwor * mob)
{
int wartoscAtaku = 5;
(*mob).HP = (*mob).HP - wartoscAtaku;
}
Potwor::Potwor(string n, int zycie, int s)
{
nazwa = n;
sila = s;
HP = zycie;
}
void Potwor::atak(Bohater * heros)
{
int wartoscAtaku = 1;
(*heros).HP = (*heros).HP - wartoscAtaku;
}
int main()
{
int akcja;
Bohater wojownik("Piotr", 100, 5);
Potwor troll("Shrek", 20, 1);
cout << "Spotkales na swojej drodze potwora! " << endl;
while (troll.HP != 0)
{
cout << "Czy chcesz go zaatakowac? Wcisnij 1" << endl;
cin.clear();
cin.sync();
cin >> akcja;
if (akcja == 1)
{
wojownik.atak(&troll);
cout << "zaatakowales trolla! Jego zycie teraz wynosi " << troll.HP << endl;
}
}
cout << "Pokonales go! ";
system("Pause");
}
Niestety otrzymuję następujące błędy:
1. 'Bohater::atak' : function does not take 1 argument
2. 'void Bohater::atak(Potwor *)' : overloaded member function not found in 'Bohater'
3. syntax error : identifier 'Potwor'
AD 1: Przecież wyraźnie przy definicji funkcji napisałem, że przyjmuje jeden argument, a konkretnie wskaźnik do obiektu klasy Potwor (troll).
AD 2 i 3 - nie mam pojęcia jak to rozgryść :/
Czy ktoś mógłby mi z tym pomóc? To moje pierwsze kroki w programowaniu więc przepraszam, jeśli odpowiedź jest banalna/pytanie głupie.