Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Nie dodawanie do vectora

Ostatnio zmodyfikowano 2016-03-04 18:48
Autor Wiadomość
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! :)
C/C++
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();
};
C/C++
#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 );
}
C/C++
#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;
        }
    }
}
P-145504
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ę.
P-145505
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.
P-145506
NiceFox
» 2016-03-03 09:45:20
vector deklaruj wyżej int main()  .
P-145510
michal11
» 2016-03-03 11:01:19
@up czyli doradzasz żeby zadeklarował vector jako globalną zmienną ? Skąd taki bezsensowny pomysł ?
P-145512
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? ;)
P-145519
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 !!!
C/C++
student v = studenci[ 0 ]; //jeśli kompilator zdecyduje się na użycie twojego konstruktora obiekt "student v" będzie bez ocen!!![/code]
P-145520
NiceFox
» 2016-03-04 17:46:26
@michal11 z opisu wynika że vector ma stanowić db, jeżeli tak to jak najbardziej globalnie.
P-145548
« 1 » 2
  Strona 1 z 2 Następna strona