Witam.
Postanowiłem nauczyć się obiektówki, ale trafiłem na problem. W ramach ćwiczeń robię program, który przechowuje dane o pilkarzach.
Problem jest taki:
Wpisuję do funkcji void dodaj_pilkarza()
odpowiednie dane o piłkarzach. Następnie próbuję poprzez funkcję void wyswietl_dane()
zobaczyć to, co wprowadziłem. I za cholerę to nie działa. Jak wiadomo kompilator duplikuje wszystkie parametry funkcji a następnie po jej zakończeniu usuwa je. Więc oczywiste jest, że po przejściu z void dodaj_pilkarza()</code> do <code>void wyswietl_dane()
nic sie nie wyswietla.
Dowiedziałem się, że z pomocą przyjdą mi wskaźniki i przeciążenie operatorów (jeśli się mylę to proszę o poprawienie mnie). Gdy dałem wskaźnik na obiekt w funkcji program nie chce się skompilowac i wyskakuje następujący błąd:
no instance of overloaded function "std::list<_Ty, _Alloc>::push_back [with _Ty=Pilkarz, _Alloc=std::allocator<Pilkarz>]" matches the argument list
oraz
syntax error: '&&' obiektowka
Jak to naprawić ?
Poniżej zamieszczam kod:
#include<iostream>
#include <string>
#include <process.h>
#include <list>
#include <cstddef>
using namespace std;
class Pilkarz
{
private:
string imie;
string nazwisko;
int wiek;
string pozycja;
public:
Pilkarz(); //to jest konstruktor.
~Pilkarz();//destruktor
void dodaj_pilkarza()
{
Pilkarz *p1=new Pilkarz;
list<Pilkarz>baza;
list<Pilkarz>::iterator i;
cout << "DODAWANIE PILKARZA" << endl;
cout << "Podaj imie: ";
cin >> p1->imie;
cout << "Podaj nazwisko: ";
cin >> p1->nazwisko;
cout << "Podaj wiek: ";
cin >> p1->wiek;
cout << "Podaj pozycje: ";
cin >> p1->pozycja;
baza.push_back(p1);
cout << p1->imie << " " << p1->nazwisko << ", " << p1->pozycja << ", lat: " << p1->wiek << endl;
}
void wyswietl_dane()
{
Pilkarz p1;
list<Pilkarz>baza;
list<Pilkarz>::iterator i;
int nr = 1;
for (i = baza.begin(); i != baza.end(); i++)
{
for (i = baza.begin(); i != baza.end(); i++)
p1 = *i;
cout << nr << p1.imie << " " << p1.nazwisko << ", " << p1.pozycja << ", lat: " << p1.wiek << endl;
nr++;
}
}
};
Pilkarz::Pilkarz()//definicja konstruktora
{
imie = "Jan";
nazwisko = "Kowalski";
wiek = 20;
pozycja = "napastnik";
}
Pilkarz::~Pilkarz()
{
cout<<"Destrukto dziala !"<<endl;
}
void menu() {
int odp=0;
do
{
cout << "-------------------------" << endl;
cout << "--- Co chcesz zrobic: ---" << endl;
cout << "| 1. Dodaj rekord |" << endl;
cout << "| 2.Usun rekord |" << endl;
cout << "| 3. Wyswietl rekordy |" << endl;
cout << "| 4. Zapisz do pliku |" << endl;
cout << "| 5. Wczytaj z pliku |" << endl;
cout << "| 6. Zakoncz program |" << endl;
cout << "-------------------------" << endl;
cin >> odp;
switch (odp)
{
case 1: //dodaj rekord
{
Pilkarz p1; //obiektem jest p1, wedlug przepisu(klasy) o nazwie pilkarz.
p1.dodaj_pilkarza();
p1.wyswietl_dane();
} // ZAPAMIĘTAĆ: jak w case nie dam klamerek to klasa nie będzie chciała się wykonać
continue;
case 2://usun rekord
{
cout << "opcja 2<<" << endl;
}
continue;
case 3://wyswietl rekordy
{
Pilkarz p1;
p1.wyswietl_dane();
}
continue;
case 4:
{
cout << "opcja 4<<" << endl;
}
continue;
case 5:
{
cout << "opcja 5<<" << endl;
}
continue;
case 6:
{
cout << "opcja 6<<" << endl;
}
break;
default:
cout << "Wybrano bledny numer. Prosze podac wartosc z zakresu od 1 do 7.";
}
break;
} while (odp != 6);
}
int main()
{
menu();
// system("pause");
return 0;
}