Prosta lista - co jest nie tak?

0
#include <iostream>
#include <cassert>

using namespace std;

class Lista {
private:
	int wartosc;
	Lista* nastepny;
public:
	Lista(int el) {
		wartosc = el;
		nastepny = NULL;
	}
	Lista push(int el) {
		Lista temp(el);
		temp.nastepny = this;
		return temp;
	}
	int get() {
		return wartosc;
	}

	Lista move() {
		return *(this->nastepny);
	}
};

int main() {
	Lista lista(1);
	assert(lista.get()==1);

	lista = lista.push(2);
	assert(lista.get()==2);

	lista = lista.move();
	assert(lista.get()==1);

	cout << "TESTOWANIE: OK";
}

push ma wstawiać element na początek listy
get zwraca pierwszy element listy
move przesuwa się w liście

Siedzę nad tym już parę godzin i nie wiem, czemu to nie działa? Program kończy mi się tą ostatnią asercją. :(

0

Masz błąd projektowy:

temp.nastepny = this;

Tak więc wykonując Lista.move() zwrócisz wskaźnik na samego siebie.

0

Z listą ten kod niewiele ma wspólnego. Wszystko alokujesz na stosie i cały czas operujesz na loklanych kopiach elementów (i cały czas je kopiujesz). W ogóle to klasa Lista to jest w rzeczywistości Węzeł listy...
Zgaduje że obiekt do którego trzymasz wskaźnik już nie istnieje i stąd wynik z get() jest losowy.

0

Mi to wygląda na jakąś nieudolną próbę adaptacji kodu z Javy.

0
Patryk27 napisał(a):

Masz błąd projektowy:

temp.nastepny = this;

Tak więc wykonując Lista.get() zwrócisz wskaźnik na samego siebie.

Nie rozumiem w czym tu jest błąd? Wykonując get() chcę zwrócić wartość aktualnym węźle.

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