• 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

VPS Starter Arubacloud
0 głosów
201 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 597 wizyt
0 głosów
2 odpowiedzi 367 wizyt
pytanie zadane 12 grudnia 2019 w C i C++ przez Ganci Użytkownik (670 p.)
0 głosów
1 odpowiedź 312 wizyt
pytanie zadane 1 grudnia 2018 w C i C++ przez mrKaczorrro13 Użytkownik (560 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...