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

Problem z dynamiczną tablicą obiektów C++

VPS Starter Arubacloud
+1 głos
432 wizyt
pytanie zadane 22 kwietnia 2015 w C i C++ przez iwan9449 Pasjonat (20,810 p.)

Tworze dynamiczną tablicę obiektów, następnie w pętli for próbuję wypełnić tę tablicę obiektami z odpowiednimi wartościami. Używam do tego konstruktora, ale coś mi się sypie.

class Student{
    private:
        string name;
        float tab[5];
    public:
        string getName(){
            return this->name;
        }
        float getAvrg(){
            float sum=0;
            for(int i=0;i<5;i++)
                sum+=this->tab[i];
            return sum/5;
        }
        Student(string n="student",float a=3,float b=3,float c=3,float d=3,float e=3){
            this->name=n;
            this->tab[0]=a;
            this->tab[1]=b;
            this->tab[2]=c;
            this->tab[3]=d;
            this->tab[4]=e;
        }
};
Student *students = new Student[numb];
    for(int i=0;i<numb;i++){
        cin>>name>>a>>b>>c>>d>>e;
        students[i] = new Student(name,a,b,c,d,e);
    }

Pozdrawiam!

2 odpowiedzi

+1 głos
odpowiedź 22 kwietnia 2015 przez daan Pasjonat (17,640 p.)
wybrane 22 kwietnia 2015 przez iwan9449
 
Najlepsza

Owszem sypie się bo źle przypisujesz wartości do tablicy, stworzyłeś dynamicznie tablice i skoro ona jest to po co chcesz na nowo alokować pamięć dla jej elementów ? 

Student *students = new Student[numb];
for (int i = 0; i<numb; i++)
{
	cin >> name >> a >> b >> c >> d >> e;
	students[i] = Student(name, a, b, c, d, e);
}

Tak to powinno być jeżeli chcesz to robić przez konstruktor :D

komentarz 22 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)
edycja 22 kwietnia 2015 przez iwan9449
Czasem rzeczy najbardziej oczywiste są najtrudniejsze do zauważenia :) Dzięki wielkie!
0 głosów
odpowiedź 22 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)

Okej, chyba już sam rozwiązałem swój problem :D

Dla potomnych, stworzyłem tablicę wskaźników do obiektów i wszystko śmiga :)

Student **students = new Student*[numb];
    for(int i=0;i<numb;i++){
        cin>>name>>a>>b>>c>>d>>e;
        students[i] = new Student(name,a,b,c,d,e);
    }

Ale jeżeli ktoś ma inny pomysł jak sobie z tym poradzić to chętnie zobaczę :)

Pozdrawiam!

 

komentarz 22 kwietnia 2015 przez daan Pasjonat (17,640 p.)
w tym wypadku tworzysz tablice wskaźników, a następnie wypełniasz tą tablice nowymi obiektami, niby ok ale to dodatkowy problem przy zwalnianiu pamięci chyba nie ma potrzeby utrudniania sobie tak bardzo, w ten sposób tworzy się dynamiecznie tablice dwuwymiarowe :)

Podobne pytania

+2 głosów
4 odpowiedzi 3,001 wizyt
pytanie zadane 19 lutego 2018 w C i C++ przez foruminfa Początkujący (310 p.)
0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 28 grudnia 2018 w C i C++ przez midlas12 Nowicjusz (140 p.)

92,961 zapytań

141,924 odpowiedzi

321,160 komentarzy

62,295 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...