Błędy listy jednokierunkowej

0

Piszę listę jednokierunkową zbudowaną ze struktury "Wezel" zawierającej obiekt klasy Rower i wskaźnik na poprzedni element. Nie pokazuje błędów kompilatora ale Warning i zaczyna Debugować. Siedzę nad tym dłuższą chwilę i nie znalazłem co jest źle. Proszę o pomoc.

#include <iostream>
#include <string>
using namespace std;

class Rower
{
public:	
	string marka;
	Rower()
	{
		marka = "Giant";
	};
	~Rower()
	{};
};


 
 
#include <iostream>
#include "Lista.h"
#include <algorithm>
using namespace std;


Lista::Lista()
{
	pierwszy = NULL;
	liczba_elementow = 0;
};

Wezel* Lista::zwrocWskaznikWezla(unsigned int index)
{
	Wezel *wezel = pierwszy;
	for (int i = 0; i < index; i++)
	{
		if (wezel == NULL)
			return NULL;

		wezel = wezel->p;
	}
	return wezel;
};


void Lista::push_back(const Rower &s)
{
	Wezel *nowy_wezel = new Wezel();
	nowy_wezel->s = s;
	nowy_wezel->p = NULL;
	if (liczba_elementow == 0)
		pierwszy = nowy_wezel;
	else
	{
		Wezel *tmp;
		tmp = zwrocWskaznikWezla(liczba_elementow - 1);
		nowy_wezel->p = tmp;
	}
	liczba_elementow++;
};


void Lista::pop_back()
{
	if (liczba_elementow < 2)
	{
		delete pierwszy;
		pierwszy = NULL;
	}
	else
	{
		Wezel *tmp = zwrocWskaznikWezla(liczba_elementow - 1);
		delete tmp->p;
		tmp->p = NULL;
	}
	liczba_elementow--;
};


void Lista::usunElementListy(unsigned int index)
{
	index = min((int)index, liczba_elementow - 1);

	if (liczba_elementow == 1)
	{
		pop_back();
		return;
	}

	if (index > 0)
	{
		Wezel *poprzedni_niz_kasowany, *nastepny_po_kasowanym;
		poprzedni_niz_kasowany = zwrocWskaznikWezla(index - 1);
		nastepny_po_kasowanym = poprzedni_niz_kasowany->p->p;
		delete nastepny_po_kasowanym->p;
		nastepny_po_kasowanym->p = poprzedni_niz_kasowany;
	}
	liczba_elementow--;
};


int Lista::size()
{
	return liczba_elementow;
};

Rower& Lista::operator[](int index)
{
	return zwrocWskaznikWezla(index)->s;
};

Lista::~Lista()
{
	while (liczba_elementow > 0)
		pop_back();
};

void Lista::stworzNowyWezelNaKoncu(Wezel *pierwszy, int liczba_wezlow)
{
	Wezel *tymczasowy = pierwszy;
	Wezel *nowy = new Wezel();

	for (int i = 0; i < liczba_wezlow - 1; i++)
		tymczasowy = tymczasowy->p;
	
	nowy->p = tymczasowy;
	nowy->p = pierwszy;
};

void wypiszRowery(Wezel *w, int liczba_wezlow_do_przejscia)
{
	Wezel *tymczasowy = w;
	for (int i = 0; i < liczba_wezlow_do_przejscia; i++);
	{
		cout << tymczasowy->s.marka << "\tnastepny wezel pod adresem: ";
		cout << tymczasowy->p << endl;
		tymczasowy = tymczasowy->p;
	}
};
2

Nie napisałeś co jest źle. Nie podałeś tych warningów. Mamy zgadywać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1