Nie dodawanie do vectora
Ostatnio zmodyfikowano 2016-03-04 18:48
Garniturek Temat założony przez niniejszego użytkownika |
Nie dodawanie do vectora » 2016-03-02 22:39:31 Witam, mam program, który pobierze dane od użytkownika i ma je wyświetlić. Nie wyświetla nic z vectora m_ocena, mimo że dodaje tam wartości i kiedy na przykład zrobię, aby wyświetlało w pobierz_oceny(), to tam wyświetla normalnie. Pomocy! :) struct sOcena { string przedmiot; float ocena; int ECTS; };
class cStudent { string m_imieNazwisko; char m_plec; int m_nrIndeksu; int m_ECTS; public: vector < sOcena > m_ocena; cStudent(); cStudent( const cStudent & s ); cStudent( string imieNazwisko, char plec, int nrIndeksu ); void pobierz(); void wyswietl(); void pobierz_oceny(); string imieNazwisko(); vector < sOcena > oceny( string nazwa, int rosnaca ); float srednia(); };
#include "Header.h"
cStudent::cStudent() : m_imieNazwisko( "Nieznany" ) , m_plec( 'n' ) , m_nrIndeksu( - 1 ) { } cStudent::cStudent( const cStudent & s ) : m_imieNazwisko( s.m_imieNazwisko ) , m_plec( s.m_plec ) , m_nrIndeksu( s.m_nrIndeksu ) { } cStudent::cStudent( string imieNazwisko, char plec, int nrIndeksu ) : m_imieNazwisko( imieNazwisko ) , m_plec( plec ) , m_nrIndeksu( nrIndeksu ) { } void cStudent::wyswietl() { cout << m_imieNazwisko << " " << m_plec << " " << m_nrIndeksu << " " << endl; cout << m_ocena.size() << endl; for( auto w = m_ocena.begin(); w != m_ocena.end(); ++w ) cout << w->przedmiot << "-" << w->ocena << " " << w->ECTS << endl; } void cStudent::pobierz_oceny() { sOcena zam; cout << "Podaj nazwe przedmiotu: "; cin >> zam.przedmiot; cout << "Podaj ocene: "; cin >> zam.ocena; cout << "Podaj liczbe ECTS: "; cin >> zam.ECTS; m_ocena.push_back( zam ); }
#include "Header.h"
int main() { vector < cStudent > studenci; cout << "Dodaj: 1" << endl; cout << "Wyswietl po kolei: 2" << endl; while( 1 ) { char a = getchar(); switch( a ) { case '1': { cout << "Podaj imie i nazwisko: "; string a; cin.sync(); getline( cin, a ); cout << "Podaj plec: "; char b; cin >> b; cout << "Podaj nr indeksu: "; int c; cin >> c; cStudent tmp( a, b, c ); tmp.pobierz_oceny(); studenci.push_back( tmp ); } break; case '2': { for( auto v = studenci.begin(); v != studenci.end(); ++v ) { v->wyswietl(); } } break; } } }
|
|
Monika90 |
» 2016-03-02 22:49:41 Wywal ten konstruktor kopiujący z klasy student, kompilator potrafi zrobić konstruktor kopiujący lepiej niż Ty, wystarczy że dasz mu szansę. |
|
Gibas11 |
» 2016-03-02 23:30:37 Generalnie konstruktory kopiujące rób dopiero gdy kompilator sobie z tym nie radzi, kod jest krótszy i bardziej przejrzysty. |
|
NiceFox |
» 2016-03-03 09:45:20 vector deklaruj wyżej int main() . |
|
michal11 |
» 2016-03-03 11:01:19 @up czyli doradzasz żeby zadeklarował vector jako globalną zmienną ? Skąd taki bezsensowny pomysł ? |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2016-03-03 17:05:01 Rzeczywiście to błąd konstruktora kopiującego. Chciałem go poprawić, ale jak się wzoruje na konstruktorach kopiujących, to i tak coś jest źle i mi program nie działa. Co jest złego w tym konstruktorze kopiującym? ;) |
|
mateczek |
» 2016-03-03 17:13:52 1. jest nie potrzebny, 2. nie kopiuje vektora oceny; 3. nie pozwala kompilatorowi na optymalizacje Zwłaszcza punkt drugi powoduje że operacja !!! student v = studenci[ 0 ];
|
|
NiceFox |
» 2016-03-04 17:46:26 @michal11 z opisu wynika że vector ma stanowić db, jeżeli tak to jak najbardziej globalnie. |
|
« 1 » 2 |