[c++] Wskaźnik na strukture
Ostatnio zmodyfikowano 2016-01-11 18:03
sensey9 Temat założony przez niniejszego użytkownika |
[c++] Wskaźnik na strukture » 2016-01-10 21:28:42 Witam, mam do zrobienia zadanie polegające na utworzeniu listy dwukierunkowej cyklicznej i nie moge sobię poradzić z jednym problemem a mianowicie w poleceniu jest napisane " Ostatnia struktura ma być wskazywana przez wskaźnik znajdujący się w części prywatnej klasy lista i nie jest przeznaczona do przechowywania danych. Jeden ze wskaźników tej struktury ma wskazywać ostatnią ze struktur zawierających dane, a drugi pierwszą strukturę listy". do tego rysunek http://pics.tinypic.pl/i/00744/nky156wbog79.pngProszę o pomoc. |
|
1aam2am1 |
» 2016-01-10 22:06:14 struct obiekt { obiekt * poprzedni; int warotosc; obiekt * nastepny; };
class lista { public: lista() { na_poczatek = new obiekt; na_poczatek->nastepny = na_poczatek; na_poczatek->poprzedni = na_poczatek; } ~lista() { delete na_poczatek; } private: obiekt * na_poczatek; };
|
|
sensey9 Temat założony przez niniejszego użytkownika |
» 2016-01-11 11:59:42 Mam jeszcze jeden problem, chcę zdefiniować operator * który umożliwi mi dostęp do danych struktury. Moja klasa wygląda tak class lista { private: struct wezel { int dane; wezel * next; wezel * prev; }; wezel * head; public: class iterator { private: wezel * w; iterator( wezel * e ) : w( e ) { } public: friend class lista; iterator() { }; iterator & operator *( iterator & i ) { return j.w->dane; ??? } }; lista() { iterator t; t.w->next = t.w; t.w->prev = t.w; */ head = t.w; } lista::wezel * poczatek() { return head->next; } lista::wezel * koniec() { return head; } lista * wstaw( wezel * a, int b ) { wezel * tmp = new wezel; tmp->dane = b; tmp->prev = NULL; tmp->next = a; iterator i1( tmp ); head->next = i1.w; }
problem polega na tym ze nie wiem jak mam zwrócić wartosć w operatorze * aby mozliwe było wypisanie danych ze struktury w taki sposób lista l1; lista::iterator j = l1.poczatek(); std::cout << * j << std::endl;
Z moich prób otrzymywałem taki komunikat error: invalid initialization of reference of type ‘lista::iterator&’ from expression of type ‘int’ return i.w->dane;
|
|
darko202 |
» 2016-01-11 13:00:43 1. spójrz na kod i zacznij od odpowiedzi na pytanie gdzie jest inicjalizacja obiektu ll zanim odwołasz się do obiektu musi on istnieć (minimum mieć zarezerwowaną pamięć)
2. czytaj komunikaty błędu : invalid initialization of reference of type ‘lista::iterator&’ to w tłumaczu google nieważne inicjalizacji odniesienia typu "listy :: iterator"
z którego łatwo zauważyć że mamy problem z odniesieniem do obiektu lista::iterator czyli to co napisałem wyżej
podsumowując : możesz dać z siebie więcej -> tylko uwierz i spróbuj to zrobić
Powodzenia :)
|
|
mateczek |
» 2016-01-11 18:01:24 |
|
1aam2am1 |
» 2016-01-11 18:03:01 int & operator *() { return w->dane; }
|
|
« 1 » |