Witam, mam taki dziwny problem że jak próbuje wstawiać elementy do listy w pętli for to nie wstawiają się one poprawnie tzn. wskaźnik na następny element wskazuje na element macierzysty i program się zapętla przy próbie wyświetlania, A jeśli wstawię elementy po kolei w osobnych instrukcjach to wszystko działa poprawnie. Czego nie dostrzegam? Z góry dzięki za pomoc
Ps. dodatkowo załączam plik z danymi do przetestowania
#include <iostream>
#include <fstream>
using namespace std;
class elem_lista {
private:
elem_lista *nast;
int nr_albumu;
string imie;
string nazwisko;
int rok_studiow;
string kierunek;
string specjalnosc;
public:
elem_lista();
elem_lista* get_nast();
int get_nr_albumu();
string get_imie();
string get_nazwisko();
int get_rok_studiow();
string get_kierunek();
string get_specjalnosc();
void set_nast(elem_lista* Nast);
void set_nr_albumu(int Nr_albumu);
void set_imie(string Imie);
void set_nazwisko(string Nazwisko);
void set_rok_studiow(int Rok_studiow);
void set_kierunek(string Kierunek);
void set_specjalnnosc(string Specjalnosc);
void display_elem();
void set_values(fstream &Strumien);
};
elem_lista* elem_lista::get_nast() {
return nast;
}
elem_lista::elem_lista() {
nast = NULL;
}
int elem_lista::get_nr_albumu() {
return nr_albumu;
}
string elem_lista::get_imie() {
return imie;
}
string elem_lista::get_nazwisko() {
return nazwisko;
}
int elem_lista::get_rok_studiow() {
return rok_studiow;
}
string elem_lista::get_kierunek() {
return kierunek;
}
string elem_lista::get_specjalnosc() {
return specjalnosc;
}
void elem_lista::set_nast(elem_lista* Nast) {
nast = Nast;
}
void elem_lista::set_nr_albumu(int Nr_albumu) {
nr_albumu = Nr_albumu;
}
void elem_lista::set_imie(string Imie) {
imie = Imie;
}
void elem_lista::set_nazwisko(string Nazwisko) {
nazwisko = Nazwisko;
}
void elem_lista::set_rok_studiow(int Rok_studiow) {
rok_studiow = Rok_studiow;
}
void elem_lista::set_kierunek(string Kierunek) {
kierunek = Kierunek;
}
void elem_lista::set_specjalnnosc(string Specjalnosc) {
specjalnosc = Specjalnosc;
}
void elem_lista::display_elem() {
cout << endl << "Imie: " << imie << endl << "Nazwisko: " << nazwisko;
cout << endl << "Nr albumu: " << nr_albumu << endl << "Rok studiow: "
<< rok_studiow;
cout << endl << "Kierunek: " << kierunek << endl << "Specjalnosc: "
<< specjalnosc << endl;
}
void elem_lista::set_values(fstream &Strumien){
Strumien >> imie>> nazwisko>> nr_albumu>> rok_studiow>> kierunek>> specjalnosc;
}
class lista {
private:
elem_lista* front;
elem_lista* end;
public:
lista();
elem_lista* get_front();
void push_front(elem_lista element);
void push_back(elem_lista element);
void push_many(elem_lista tab[], int ilosc);
void pop_front();
void push_after(elem_lista* element, elem_lista nowy);
elem_lista* find(int Indeks, string Nazwisko);
void erase_elem(elem_lista* element);
};
elem_lista* lista::get_front() {
return front;
}
void lista::push_front(elem_lista element) {
elem_lista *temp = front;
front = &element;
if (end == NULL)
end = &element;
else
element.set_nast(temp);
}
void lista::push_many(elem_lista tab[], int ilosc) {
for (int i = 0; i < ilosc; i++) {
push_front(tab[i]);
}
}
void lista::push_back(elem_lista element) {
end->set_nast(&element);
end = &element;
}
void lista::pop_front() {
elem_lista *temp = front;
temp = temp->get_nast();
front = temp;
}
void lista::push_after(elem_lista* element, elem_lista nowy) {
elem_lista *temp = element->get_nast();
element->set_nast(&nowy);
nowy.set_nast(temp);
}
elem_lista* lista::find(int Indeks, string Nazwisko) {
elem_lista* temp = front;
while (temp) {
if (temp->get_nr_albumu() == Indeks && temp->get_nazwisko() == Nazwisko)
return temp;
temp = temp->get_nast();
}
return NULL;
}
void lista::erase_elem(elem_lista* element) {
elem_lista* temp = front;
while (temp) {
if (temp == element) {
temp->set_nast(element->get_nast());
}
temp = temp->get_nast();
}
}
lista::lista() {
front = NULL;
end = NULL;
}
void display_list(lista kolejka) {
elem_lista* temp = kolejka.get_front();
while (temp) {
temp->display_elem();
temp = temp->get_nast();
}
}
int main() {
lista kolejka;
fstream plik;
plik.open( "dane.txt", std::ios::in | std::ios::out );
if(!plik.good()){
cerr << "Nie udalo sie otworzyc pliku!" << endl;
}
elem_lista tab[3];
for (int i = 0; i < 3; i++) tab[i].set_values(plik);
//Jeśli zrobię tak to działa poprawnie
/* kolejka.push_front(tab[0]);
kolejka.push_front(tab[1]);
kolejka.push_front(tab[2]);
*/
//jeśli zrobię tak to nie działa
for (int i = 0; i < 3; i++) {
kolejka.push_front(tab[i]);
}
display_list(kolejka);
return 0;
}