• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Tworzenie tablicy dynamicznej dla obiektu znajdującego się w strukturze

Object Storage Arubacloud
0 głosów
202 wizyt
pytanie zadane 17 maja 2021 w C i C++ przez japsoyignu Nowicjusz (120 p.)
zamknięte 17 maja 2021 przez japsoyignu

Mam taką strukturę:

struct SStudent
{
    string imie, nazwisko;
    unsigned nr_indeksu, gr_dz, gr_lab, nie_zal;
    string* wykaz_nie_zal;
};

Tworzenie tablicy struktury SStudent:

SStudent* studenci = nullptr;

 

Jak stworzyć tablicę dynamiczną dla obiektu:

string* wykaz_nie_zal;

znajdującego się w strukturze SStudent?

komentarz zamknięcia: Z pomocą komentarzy udało się rozwiązać problem
komentarz 17 maja 2021 przez tkz Nałogowiec (42,000 p.)
Dlaczego nie korzystasz z std::vector?
komentarz 17 maja 2021 przez japsoyignu Nowicjusz (120 p.)
Należy tak to wykonać. Inaczej nie może być. Szukam pomocy, może ktoś umie
komentarz 17 maja 2021 przez tkz Nałogowiec (42,000 p.)

Dokładnie tak jak masz? Wykładowca jest sadystą? 

// Example program
#include <iostream>
#include <string>
using namespace std;
struct SStudent
{
    string imie, nazwisko;
    unsigned nr_indeksu, gr_dz, gr_lab, nie_zal;
    string* wykaz_nie_zal;
};

int main()
{
    SStudent s;
    s.wykaz_nie_zal = new string[10];
    for(int i=0; i<10;++i)
    {
        s.wykaz_nie_zal[i] = string(i,'a'+i);
    }
        for(int i=0; i<10;++i)
    {
        std::cout<<s.wykaz_nie_zal[i]<<'\n';
    }
    delete[] s.wykaz_nie_zal;
}

 

komentarz 17 maja 2021 przez japsoyignu Nowicjusz (120 p.)

A jak to zrobić, gdy to zamiast

SStudent s;

mam talblicę:

SStudent* s;

Nie wiem jak to zrobić właśnie...

komentarz 17 maja 2021 przez tkz Nałogowiec (42,000 p.)
Ale po co wskaźnik?

Tworzysz obiekt studenta przez new, zamiast kropki ->, usuwasz na koniec obiekt studenta.
komentarz 17 maja 2021 przez japsoyignu Nowicjusz (120 p.)

Mam takie coś:

SStudent* studenci = new SStudent [lista.liczba_studentow];

Każdy student ma podaną ilość wpisanych przedmiotów i jakie to są. Jest liczba, wczytuję ją i muszę umieścić teraz te przedmioty w tym stringu. Może ich być 3, 4 itd. Ogólnie to tylko problem jest z tym, że mam tablicę studenci.

Próbowałem tak:

studenci[i].wykaz_nie_zal = new string [studenci[i].nie_zal];
                    for(int j=0; j<studenci[i].nie_zal; j++)
                    {
                        studenci[i].wykaz_nie_zal = string(i,'a'+i);
                    }

Nie da się stworzyć tej tablicy dynamicznej. 

1
komentarz 17 maja 2021 przez tkz Nałogowiec (42,000 p.)
Tak jak wspomniałem. Zamiast obiekt.pole musisz użyć obiekt->pole. Dodatkowo wykaz_nie_zal również jest tablicą, nie dowlujesz się do tego jak do tablicy.
komentarz 17 maja 2021 przez japsoyignu Nowicjusz (120 p.)

Wiesz co. Miałem błąd przy tworzeniu tablicy dynamicznej. Ona była już zdeklarowana także stringa z lewej strony już nie trzeba pisać. Tak jest ok:

studenci[i].wykaz_nie_zal = new string [studenci[i].nie_zal];

 

komentarz 17 maja 2021 przez japsoyignu Nowicjusz (120 p.)
Z tym obiekt->pole nie można, bo nie działa. Musi być z kropką. To pewnie dlatego, że odwołuje się do studenci[i].cos, a nie samej tablicy studenci->cos.

Dzięki za pomoc.
komentarz 17 maja 2021 przez tkz Nałogowiec (42,000 p.)
// Example program
#include <iostream>
#include <string>
using namespace std;
struct SStudent
{
    string imie, nazwisko;
    unsigned nr_indeksu, gr_dz, gr_lab, nie_zal;
    string* wykaz_nie_zal;
};
 
int main()
{
    SStudent *s = new SStudent[10];
    for(int j=0; j<10;++j)
    {
        s[j].wykaz_nie_zal = new string[10];
        for(int i=0; i<10;++i)
        {
            s[j].wykaz_nie_zal[i] = string(j,'a');
        }
    }
    for(int j=0; j<10;++j)
    {
        for(int i=0; i<10;++i)
        {
            std::cout<<s[j].wykaz_nie_zal[i]<<'\n';
        }
        delete[] s[j].wykaz_nie_zal;
    }
 
    delete[] s;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 617 wizyt
0 głosów
2 odpowiedzi 368 wizyt
pytanie zadane 12 grudnia 2019 w C i C++ przez Ganci Użytkownik (670 p.)
0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 1 grudnia 2018 w C i C++ przez mrKaczorrro13 Użytkownik (560 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...