Witam. Mam problem z przeszukiwaniem listy zawierającej klasy, a dokładnie z funkcją szukaj_zawodnika. A oto co napisałem:
baza.h
#ifndef BAZA_H
#define BAZA_h
#include <list>
#include "zawodnicy.h"
#include "tor.h"
#include "zawody.h
class Baza
{
list<Zawodnik_Elita> lista_elita;
list<Zawodnik_Junior> lista_junior;
list<Zawodnik_Open> lista_open;
list<Tor> lista_tor;
list<class Zawody> lista_zawody;
public:
Baza(){};
Baza(const Baza &b){};
int lista_elita_size()
{
return lista_elita.size();
}
int szukaj_zawodnika(int id,int opt)
{
list<Zawodnik_Elita>::iterator iter_elita;
list<Zawodnik_Junior>::iterator iter_junior;
list<Zawodnik_Open>::iterator iter_open;
switch(opt)
{
case 0:
for(iter_elita=lista_elita.begin(); iter_elita != lista_elita.end(); iter_elita++)
{
if((*iter_elita).id_zawodnika==id)
return 1;
}
break;
case 1:
for(iter_junior=lista_junior.begin(); iter_junior != lista_junior.end(); iter_junior++)
{
if((*iter_junior).id_zawodnika==id) return 1;
}
break;
case 2:
for(iter_open=lista_open.begin(); iter_open != lista_open.end(); iter_open++)
{
if((*iter_open).id_zawodnika==id) return 1;
}
break;
}
return 0;
}
#endif
A oto plik zawierający klasę zawodnik.
zawodnik.h
#ifndef ZAWODNICY_H
#define ZAWODNICY_H
#include <iostream>
#include <string>
using namespace std;
class Zawodnik
{
public:
int id_zawodnika;
string imie;
string nazwisko;
string pesel;
public:
Zawodnik(int id,string _imie,string _nazwisko,string,_pesel):id_zawodnika(id),imie(_imie),nazwisko(_nazwisko),pesel(_pesel)
{
};
Zawodnik(const Zawodnik &_zawodnik):id_zawodnika(_zawodnik.id_zawodnika),imie(_zawodnik.imie),nazwisko(_zawodnik.nazwisko),pesel(_zawodnik.pesel){};
friend ostream &operator <<(ostream & s,const Zawodnik &z)
{
s<<z.imie<<"\n"<<z.nazwisko<<"\n"<<z.pesel<<"\n\n";
return s;
};
virtual int zmien_dane(){return 0;};
};
//***********************************Zawodnik_elita***********************************
class Zawodnik_Elita: public Zawodnik
{
private:
int nr_licencji; //numer licencji
int nr_dowodu;
public:
Zawodnik_Elita(int id,string _imie,string _nazwisko,string _pesel,int _nr_lic,int _nr_dowodu):Zawodnik(id,_imie,_nazwisko,_pesel),nr_licencji(_nr_lic),nr_dowodu(_nr_dowodu)
{
};
Zawodnik_Elita(const Zawodnik_Elita & zawodnik):Zawodnik(zawodnik.id_zawodnika,zawodnik.imie,zawodnik.nazwisko,zawodnik.pesel),nr_licencji(zawodnik.nr_licencji),nr_dowodu(zawodnik.nr_dowodu)
{
};
friend ostream &operator <<(ostream & s,const Zawodnik_Elita &z)
{
s<<z.imie<<"\n"<<z.nazwisko<<"\n"<<z.pesel<<"\n"<<z.nr_licencji<<"\n"<<z.nr_dowodu<<"\n\n";
return s;
};
int operator==(int id)
{
if (this->id_zawodnika !=id) return 0;
return 1;
}
int zmien_dane(){return 0;};
int GetId()
{
return this->id_zawodnika;
};
};
#endif
I jeszcze się zastanawiam czy nie lepiej by było przechowywać wszystkich zawodników w jednej liście, ale wtedy muszę przechowywać wskaźniki na klasę Zawodnik i za pomocą RTTI mogę rozpoznawać z jakiej klasy dokładnie jest dany zawodnik? I jeszcze nie wiem dlaczego przy klasie Zawody muszę użyć przedrostka 'class' przy innych klasach się o to kompilator nie czepia.