Inteligentne wskaźniki w strukturze

0

Witam , mam takie oto zadanie i nie ma pojęcia jak to zrobić, mam kod jedynie na zwykłych wskaźnikach, lecz
nie mam pojęcia jak to zrobić na inteligentnych.

Zdefiniuj strukturę strukturę student ze składnikami: album, wydział kierunek semestr. W
funkcji main() powołaj dynamicznie strukturę typu student z użyciem intelligentnych wskaźników i
wypełnij treścią z własnymi danymi. Napisz funkcję do wyświetlania na ekranie struktury, która w
argumencie dostanie inteligentny wskaźnik na strukturę typu student i ładnie wyświetli strukturę w
sposób sformatowany z użyciem manipulatorów dla cout. Zabezpiecz strukturę przed omyłkową
zmianą wartości

#include <iostream>
#include <string.h>
#include <cstdlib>

using namespace std;

struct student {
    int album;
    string wydzial;
    string kierunek;
    int semestr;
};

void wyswietl (const student* Ja) {
    cout << "Moj numer albumu: " << Ja->album << endl;
    cout << "Moj wydzial: " << Ja->wydzial << endl;
    cout << "Moj kierunek: " << Ja->kierunek << endl;
    cout << "Moj semestr: " << Ja->semestr << endl;
}

int main()
{
    student* Ja = new student;
    Ja->album = 249087;
    Ja->wydzial = "Elektronika";
    Ja->kierunek = "Cyberbezpieczenstwo";
    Ja->semestr = 1;

    wyswietl(Ja);
    delete Ja;
    return 0;
}
1
std::unique_ptr<student> ja = std::unique_ptr<student>(new student);

ot i tyle.

0

Dodaje w załączniku

1

Toć przecie działa - https://onlinegdb.com/SkAdMcDXV

EDIT:
Aaa, o użycie delete chodzi. Otóż Bracie między innymi na tym inteligencja tychże wskaźników polega, że same robią delete wewnątrz siebie jak przyjdzie na to pora.
Natomiast co do błędu dotyczącego wyswietl() to masz kawa na ławę napisane co mu nie pasi - teraz zamiast zwykłego, prostego wskaźnika przesyłasz do funkcji zaawansowany wskaźnik std::unique_ptr<student>

0

Działa i owszem, ale nie działa wywołanie funkcji a bez niej nie obejdzie się z poleceniem.

EDIT : Tak mój błąd, zapomniałem to wywalić z kodu. Tak czy inaczej nie wiem gdzie jest błąd w wywoływaniu funkcji

3

+= protip: użyj std::make_unique zamiast ctor + new.
Tutaj to nie ma znaczenia, ale lepiej wyrabiać dobre nawyki.

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