no więc tak, program wywala się, bo do funkcji wektor przekazywany jest przez wartość, czyli vector a w Twojej funkcji stworz, to jest
kopia vectora a z funkcji main, czyli wszystkie działania przeprowadzone w funkcji stworz sa robione na tej kopii lokalnej, ktora po zakonczeniu funkcji jest kasowana. Ty później chcesz ten vector a wypisać, ale on jest pusty, bo nic do niego nie dodałeś, dlatego program się wywala, bo odwołujesz się do pamięci, w której nic nie ma.
Program możnaby dużo lepiej napisać, ograniczę się jednak tylko do funkcji dla Ciebie kluczowej, teraz powinno to działać (mi działa).
Kod: Zaznacz cały
void stworz(vector<rekord> &a, int n)
{
rekord temp;
for(int i=0;i<n;++i)
{
cout << "imie: ";
cin >> temp.imie;
cout << "nazwisko: ";
cin >> temp.nazwisko;
cout << "telefon: ";
cin >> temp.telefon;
a.push_back(temp);
}
}
A więc krótko o funkcji. Najpierw tworze sobie nową zmienna typu rekord, do wczytywania danych. Do niej wczytuje po kolei dane i później dodaję ją do vectora
a.push_back(temp). Reszta jest jasna.
Najważniejszą zmianą w tej funkcji jest dodanie
& przed a w nagłówku funkcji. Jest to dosyć trudne pojęcie w c++ (przynajmniej na początku), ale stanowi o jego mocy. W skrócie do funkcji przekazywany jest adres vectora a w pamieci, więc teraz wszystkie odwołania do a w funkcji nie odnoszą się do kopii lokalnej, ale do adresu parametru jej przekazanej, więc elementy dodawane są do vectora a z funkcji main (trochę nieszczęśliwie dobrałeś sobie oznaczenia, lepiej nie oznaczać zmiennych lokalnych i argumentow funkcji tymi samymi literkami, bo może to komplikować czytanie programu i narzucać myślenie, że to ta sama zmienna.
Mam nadzieję, ze nie zamieszałem za bardzo
zmiany są tylko w w/w funkcji, wiec nie załączam ponownie tego pliku, bo wygląda on identycznie za wyjątkiem tego co tu napisałem.