Zmiana wskazania wskaźnika

0

Witam potrzebuję zmienić wskazanie wskaźnika o nowo utworzony obiekt, a nie wiem jak to zrobić, przejrzałem różne strony, ale nie znalazłem odpowiedzi, próbowałem różnych kombinacji własnych pomysłów, ale żaden nie działa, zatrzymałem się widocznym niżej pomyśle, proszę o wskazanie błędu i jeśli by nie było problem choć krótkie wyjaśnienie dlaczego tak a nie inaczej byłbym bardzo wdzięczny.

 #include <iostream>
#include <memory>

struct wezel
{
    int wartosc;
    std::unique_ptr<wezel> nastepny;
    wezel() { wartosc = 0;
    nastepny = nullptr;
    }
};

void dodaj(std::unique_ptr<wezel> &w, int liczba)
{
    std::unique_ptr<wezel> nowy{ new wezel };
    wezel*pop;
    pop = nowy.get();
    w->nastepny = pop;
}

int main()
{
    std::unique_ptr<wezel> liczba{ new wezel };
    dodaj(liczba, 1);
    return 0;
}
0

Użyj reset(_wskaźnik_na_nowywęzeł) na unique_ptr lub poprzedni = std::move(_wskaźnik_na_nowywęzeł) (gdzie poprzedni jest unique_ptr).

Np. tak... :

#include <iostream>
#include <memory>
#include <cstdlib>

struct wezel
{
    int wartosc;
    std::unique_ptr<wezel> nastepny;
    // Nie trzeba przekazywać nastepny nullptr. Bezargumentowo robi nullptr
    wezel() : wartosc{}, nastepny{} {
    }
};

void dodaj(std::unique_ptr<wezel> &w, int liczba)
{
    std::unique_ptr<wezel> nowy{ new wezel };
    nowy->wartosc = liczba;
    if(not w->nastepny)
    {
        w->nastepny = move(nowy);
    } else {
        // Tu abyś wiedział co się dzieje...
        std::cerr << "Nie mogę dodać nowego węzła jeśli na coś wskazuje"  << std::endl;
        exit(EXIT_FAILURE);
    }
}

int main()
{
    std::unique_ptr<wezel> liczba{ new wezel };
    dodaj(liczba, 1);
    return EXIT_SUCCESS;
}

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