Wstawianie i wyświetlanie wartości w tablicy wskaźników na struktury i klasy

0

Cześć, mam problem z tablicami wskaźników. Rozumiem ich sens oraz jak je stworzyć i usunąć, jednak nie potrafię przypisać strukturom na które wskazują żadnych wartości. Do poniższego kodu muszę dodać dwie funkcje. W pierwszej dla każdego elementu tablicy muszę przypisać imię i wiek, druga funkcja będzie je wyświetlać. Następnie muszę napisać ten sam kod tylko zamienić struktury na klasy.

#include <iostream>

using namespace std;

struct Gosc
{
    string imie;
    size_t wiek;
};


void stworz(Gosc**& tab, const size_t sz)
{
    tab = new Gosc * [sz];
    for (size_t i = 0; i < sz; i++)
        tab[i] = new Gosc;
}

void usun(Gosc**& tab, const size_t sz)
{
    delete[] tab;
}


int main()
{
    Gosc** wsk;
    stworz(wsk, 7);
    usun(wsk, 7);
}

1

Rozumiem ich sens oraz jak je stworzyć i usunąć

Patrząc po kodzie, niestety muszę stwierdzić, że nie rozumiesz. W swoim kodzie zamiast tablicy wskaźników, tworzysz kwadratową tablice tablic wskaźników oraz błędnie ją zwalniasz. Dla tak zaalokowanej pamięci, powinieneś ją zwolnić w następujący sposób

for(size_t i = 0; i < sz; ++i)
  delete[] tab[i];

delete[] tab;
0

Wykładowca nazywa to tablicą wskaźników i w taki sposób ją zwalnia (jednak on ma swoją własną terminologie i techniki), ale nie tego dotyczyło pytanie.

0

ale nie tego dotyczyło pytanie

Rozwiązania Twoich problemów będą inne dla tablicy jednowymiarowej i dwuwymiarowej. Z jednej strony, dwuwymiarowa nie ma tutaj sensu, jednak inicjalizacja jest jawnie zrobiona jako dwuwymiarowa.

0

@several: w tym przypadku chodzi o tablice jednowymiarową

2

No to spoko, tak będzie prościej. Teraz musisz wyjaśnić co jest dla Ciebie nie jasne w tym

dla każdego elementu tablicy muszę przypisać imię i wiek

Bo wcześniej napisałeś, że rozumiesz sens tablicy wskaźników, masz już ją zainicjalizowaną i wiesz jak wygląda pętla. W takim razie takie zadanie nie powinno stanowić problemu. Jeżeli jeszcze intuicja nic Ci nie podpowiada to napiszę, że w pętli for ograniczonej do sz przypisujesz kolejno wartości korzystając z operatora indeksowania tab[i].

0

jedynym problemem jest sama operacja przypisania wartości z operatorem indeksowania. O ile przy pojedynczym wskaźniku, lub ich braku nie stanowiło to żadnego problemu, tak w tej sytuacji gubię się i nie potrafię tego poprawnie zapisać.

1

Przed dopisywaniem czegokolwiek należy poprawić błąd;
Ponieważ funkcja stwórz ma sz+1 wywołaną komendę new to funkcja usun musi mieć tyle samo wywołań delete ale niestety ma tylko jedną.

0

Ok. Napisze ktoś po prostu jak poprawnie powinien wyglądać ten kod razem z wstawianiem i wyświetlaniemKliknij

0

Jeżeli potrzebujesz gotowca Ogłoszenia Drobne

0

Nie potrzebuje gotowca. To jest program tylko i wyłącznie do nauki, a najłatwiej będzie mi się nauczyć widząc to czego nie rozumiem dodane do kodu

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