[C++] lista dwukierunkowa, dodawanie/wyswietlanie nie działa
Ostatnio zmodyfikowano 2016-04-17 09:35
exik92 Temat założony przez niniejszego użytkownika |
[C++] lista dwukierunkowa, dodawanie/wyswietlanie nie działa » 2016-04-16 20:58:45 Witam. Jestem w trakcie robienia mini projektu dotyczącego czytelników, książek i ich wypożyczania. Zamieszczę jedynie fragment kodu, w którym występuje problem oraz pozostały kod do uruchomienia programu. Problem tkwi w poprawnym wydrukowaniu czytelników tzn: imię, nazwisko oraz dla każdego (dwukierunkowa) lista wypożyczonych książek. W main'ie kod pokazuje, że funkcja print(lista) działa poprawnie. Natomiast gdy chce za pomocą funkcji wyświetlić grupę czytelników, która korzysta z funkcji print(lista), program się wykrzacza. Najciekawsze jest to, że dla jednego czytelnika wszystko działa. Natomiast gdy do grupy dodam kolejnego czytelnika to wtedy jest błąd. Czy ktoś mógłby mi pomóc? #include <iostream> #include <cstdlib>
using namespace std;
class Ksiazka { private: Ksiazka * pop, * nast; public: string tytul; Ksiazka * getPop() { return pop; } Ksiazka * getNast() { return nast; } void setPop( Ksiazka * NewPop ) { pop = NewPop; } void setNast( Ksiazka * NewNast ) { nast = NewNast; } void pobierzK() { cout << "Podaj tytul ksiazki" << endl; cin >> tytul; } Ksiazka() { }; Ksiazka( string SETtytul ) { pop = NULL; nast = NULL; tytul = SETtytul; } Ksiazka( Ksiazka * R ) { tytul = R->tytul; }; void wydruk() { cout << "Tytul: " << tytul << endl; } }; class Lista { public: Ksiazka * pierwszy, * ostatni; int ilosc; Lista() { pierwszy = NULL; ostatni = NULL; ilosc = 0; } Lista( Lista * M ) { pierwszy = M->pierwszy; ostatni = M->ostatni; ilosc = M->ilosc; } ~Lista() { Ksiazka * E = pierwszy; Ksiazka * Temp; while( E ) { Temp = E; E = Temp->getNast(); delete Temp; } } void Add2Begin( Ksiazka * E ) { if( pierwszy ) { pierwszy->setPop( E ); E->setNast( pierwszy ); pierwszy = E; ilosc++; } else { pierwszy = E; ostatni = E; ilosc = 1; } } };
void print( Lista * M ) { Ksiazka * Temp; Temp = M->pierwszy; if( Temp == NULL ) { cout << endl; cout << "Brak elementow" << endl; } else { cout << "ilosc: " << M->ilosc << endl; while( Temp ) { Temp->wydruk(); Temp = Temp->getNast(); }; } } class Czytelnik : public Ksiazka , Lista { public: string Imie; string Nazwisko; Lista * K; Czytelnik() { Imie = ""; Nazwisko = ""; K = NULL; }; Czytelnik( string imie, string nazwisko, string TYTUL ) { Imie = imie; Nazwisko = nazwisko; tytul = TYTUL; }; Czytelnik( string imie, string nazwisko, Lista * R ) { Imie = imie; Nazwisko = nazwisko; K = R; }; void pobierz() { cout << "Podaj imie" << endl; cin >> Imie; cout << "Podaj nazwisko" << endl; cin >> Nazwisko; } };
class grupa : public Czytelnik { public: int ilosc; Czytelnik * ekipa; grupa() { ekipa = NULL; ilosc = 0; } void wyswietl() { if( ekipa == NULL ) { cout << "lista czytelnikow jest pusta" << endl; } else { cout << "ilosc: " << ilosc << endl; for( int i = 0; i < ilosc; i++ ) { cout << i + 1 << "." << "Imie: " << ekipa[ i ].Imie << " Nazwisko: " << ekipa[ i ].Nazwisko << " \nWypozyczone ksiazki: " << endl; cout << "ok przed lista"; print( ekipa[ i ].K ); cout << "ok po liscie"; } } } };
void dodaj( grupa * G, Czytelnik * C ) { C->pobierz(); if( G->ekipa == NULL ) { G->ekipa = new Czytelnik[ 1 ]; G->ilosc = 1; G->ekipa[ 0 ].Imie = C->Imie; G->ekipa[ 0 ].Nazwisko = C->Nazwisko; G->ekipa[ 0 ].K = new Lista(); cout << "ok po pustej"; } else { Czytelnik * newEkipa = new Czytelnik[ G->ilosc + 1 ]; for( int i = 0; i < G->ilosc; i++ ) { newEkipa[ i ].Imie = G->ekipa[ i ].Imie; newEkipa[ i ].Nazwisko = G->ekipa[ i ].Nazwisko; newEkipa[ i ].K = G->ekipa[ i ].K; cout << "ok po przepisaniu"; } G->ilosc++; newEkipa[ G->ilosc - 1 ] = Czytelnik( C->Imie, C->Nazwisko, C->K ); cout << "ok po ostatnim"; delete[] G->ekipa; G->ekipa = newEkipa; cout << "ok po usunieciu"; } } int main( int argc, char ** argv ) { grupa * G = new grupa; Czytelnik * C = new Czytelnik(); Lista L; Czytelnik * D = new Czytelnik(); { Ksiazka * E = new Ksiazka( "a" ); L.Add2Begin( E ); } { Ksiazka * E = new Ksiazka( "b" ); L.Add2Begin( E ); } { Ksiazka * E = new Ksiazka( "c" ); L.Add2Begin( E ); } { Ksiazka * E = new Ksiazka( "d" ); L.Add2Begin( E ); } { Ksiazka * E = new Ksiazka( "e" ); L.Add2Begin( E ); } print( & L ); { Ksiazka * E = new Ksiazka( "bbbbbbbb" ); L.Add2Begin( E ); } print( & L ); system( "pause" ); return 0; }
// Dodam, że jestem nowicjuszem jeśli chodzi o programowanie. Także liczę na każda krytykę. Pozdrawiam! |
|
exik92 Temat założony przez niniejszego użytkownika |
» 2016-04-17 09:35:25 Problem rozwiązany. Z pośpiechu w konstruktorze zamiast tworzyć nowa Listę to ją nullowałem. Czytelnik() { Imie = ""; Nazwisko = ""; K = NULL; }; Temat do zamknięcia. |
|
« 1 » |