Stworzenie listy z obiektów klasy

0

Witam
Chcialem utworzyć listę, której elementy są obiektami klasy Wezel.
Mam problem z dodaniem elementu, tzn. stworzyłem funkcję pushFront w nastepujacy sposób

 Wezel *wsk;
	wsk=new Wezel;
	wsk->data=word; //word to string który chcę zamieścic w nowym elemencie
	wsk->next=begin;
	begin=wsk;
} 

Gdzie begin jest wskaznikiem który zawiera pierwszy element (po którym chcę wstawić nowy)
Po dodaniu kilku elementów wypisuję funkcją

	Wezel *iterator=begin;
	do{
	cout << (*iterator).data;
	iterator=iterator->next;
	}while(iterator!=NULL);

I teraz wszystko działa. Moje pytanie brzmi, dlaczego nie można zastąpić funkcji dodaj takim kodem?:


Wezel nowy(word);
nowy.next=begin;
begin=&nowy;

Myślałem że te zapisy znaczą to samo

Definicja klasy Wezel:

class Wezel{
	friend class master; //jest to klasa z której wywołuje np dodanie nowego elementu
private:
	string data;
	Wezel *next;
public:
	Wezel(string a) { data=a; };
};

Program kompiluje się i uruchamia, ale gdy nie wywołam funkcji wypisującej. Gdy próbuję wypisać pokazuje naruszenie pamięci.
Z góry dziękuję za pomoc.

0

_
Owiń to sobie klasą.

2
Besanouno napisał(a):

I teraz wszystko działa. Moje pytanie brzmi, dlaczego nie można zastąpić funkcji dodaj takim kodem?:

Wezel nowy(word);
nowy.next=begin;
begin=&nowy;

Myślałem że te zapisy znaczą to samo

Bo nowy to zmienna lokalna i po wyjściu z funkcji zostanie zniszczona, a begin będzie wskazywać na nieistniejący obiekt.

0

W porządku, już rozumiem! :)
Dziękuję bardzo :)

Edit: A jesli się da, to w jaki sposób zapisać konstruktor, który po stworzeniu elementu Wezel *nowy automatycznie alokuje mu pamięć?

0

Wezel* nowy tworzy tylko wskaźnik, więc żaden konstruktor nie zostanie tutaj wywołany. Co też oznacza, że żaden nie jest w stanie alokować pamięci na tym etapie.

0

W porządku.
Dziekuje jeszcze raz :)

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