Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Wskaźnik na strukture

Ostatnio zmodyfikowano 2016-01-11 18:03
Autor Wiadomość
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.png



Proszę o pomoc.
P-143349
1aam2am1
» 2016-01-10 22:06:14
C/C++
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;
    }
    //inne funkcje
private:
    obiekt * na_poczatek; //wskaznik na obiekt nieprzechowujacy zadnych danych
   
};
P-143355
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

C/C++
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
C/C++
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;
P-143362
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 :)
P-143364
mateczek
» 2016-01-11 18:01:24
P-143374
1aam2am1
» 2016-01-11 18:03:01
C/C++
int & operator *()
{
    return w->dane;
   
}
P-143375
« 1 »
  Strona 1 z 1