[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 rysunekhttp://pics.tinypic.pl/i/00744/nky156wbog79.png Proszę 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 » |