Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Przekazywanie wskaźnika do obiektu innej klasy [C++]

Tazoru 23 Gru 2011 18:45 2273 2
  • #1 23 Gru 2011 18:45
    Tazoru
    Poziom 2  

    ListaZwierzatek jest klasa zawierająca listę dwukierunkowa której elementami są
    obiekty klasy Zwierzatka. Niestety mam problem z przypisaniem wskaźnika.

    Zwierzatka *nasz=new Zwierzatka();
    *nasz=Lista.ZwrocWskaznik(n); //error: cannot convert `Zwierzatka' to `Zwierzatka*' in assignment


    Metoda, która zwraca wskaźnik na wybrany element listy:

    Zwierzatko & ListaZwierzatek::ZwrocWskaznik(int n)
    {
    if(n==1) return Pierwsze;
    else if(n>=LiczbaZwierzatek) return Ostatnie;
    else
    {
    Zwierzatko* x=new Zwierzatko();
    x=Pierwsze;
    for(int i=1;i<n;i++)
    x=x->Nastepne;
    return x;
    }
    }

    0 2
  • #2 23 Gru 2011 19:13
    michcior
    Poziom 30  

    Referencja to nie wskaźnik. ListaZwierzatek zwraca referencję. A w ogóle to po co inicjować "*nasz" tworząc nowy obiekt który zaraz nadpisujemy? Jakaś pozostałość po referencji kiedy kompilator miał pretensję o niezainicjowaną referencję, potem przerobiłeś na wskaźniki. Oj coś tu jest poplątane.

    0
  • #3 24 Gru 2011 13:06
    Tazoru
    Poziom 2  

    Czy tak zmodyfikowana metoda będzie poprawnie zwracała referencje?
    (Pierwsze oraz Ostatnie są wskaźnikami)

    Zwierzatko & ListaZwierzatek::ZwrocReferencje(int n)
    {
    if(n==1) return *Pierwsze;
    else if(n>=LiczbaZwierzatek) return *Ostatnie;
    else
    {
    Zwierzatko* x;
    x=Pierwsze;
    for(int i=1;i<n;i++)
    x=x->Nastepne;
    return *x;
    }
    }



    Dla wywołania jej w taki sposób:
    Zwierzatka &nasz=Lista.ZwrocReferencje(n);

    0