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_nowy_węzeł) na unique_ptr lub poprzedni = std::move(wskaźnik_na_nowy_wę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