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

Odwołanie w vector do innej klasy

Ostatnio zmodyfikowano 2013-09-20 13:39
Autor Wiadomość
mab
Temat założony przez niniejszego użytkownika
Odwołanie w vector do innej klasy
» 2013-09-20 10:55:17
Witam mam następujący problem.
Stworzyłem vector typu Client:   vector<Client>clientvector;
i vector typu int      vector<int>airclientvector;

Konstruktor klasy Client:
C/C++
Client::Client( int IDa, double starta, int gdziea, double when_whanta, double when_finisha, int is_herea, int bus_or_taxia, int prioryteta, int go_or_backa )
{
    int ID = IDa;
    double start = starta;
    int gdzie = gdziea;
    double when_whant = when_whanta;
    double when_finish = when_finisha;
    int is_here = is_herea; // 1 oznacza lotnisko,  2-przystanek 3- autobus 4- hotel  5-taksowka 6-samolot
    int bus_or_taxi = bus_or_taxia;
    int priorytet = prioryteta;
    int go_or_back = go_or_backa;
    //cout<<"Client: "<<ID<<" "<<start<<" "<<when_whant<<" "<<when_finish<<" "<<is_here<<" "<<bus_or_taxi<<" "<<priorytet<<" "<<go_or_back<<endl;
}

//W funkcji z klasy Symulation robię coś takiego:

void Symulation::newpassangers( events * x ) //przybycie nowych pasażerów (czas, lotnisko, nie obslugiwany, typ)
{
    double kiedy;
    kiedy = gen.wykladniczyS2( lamb );
    schedule( new events( kiedy, 1, 0, 0 ) ); // zaplanowanie przybycia kolejnych pasazerow (
    int prawdop;
    double genwhotelu;
    double dziw;
    double wynik;
    int ile;
    ile = airp.many_passangers();
    //cout<<"Przybedzie "<<ile<<" pasazerow"<<endl;
    for( int i = 0; i < ile; i++ )
    {
        prawdop = gen.prawdopodobnypi();
        dziw = gen.dziwny() * 1440; // liczba dni razy 24 godziny razy 60 minut bo jednosta czasu sa minuty
        genwhotelu = gen.rownomiernywhotelu();
        wynik = dziw - genwhotelu;
        cout << "iterator nowego klienta: " << iterator << endl;
        cout << "Do ktorego hotelu pojedzie: " << prawdop << endl;
        cout << "Dlugosc koleji klientow " << clientvector.size() << endl;
        clientvector.push_back( Client( iterator, systime, prawdop, dziw, 0, 1, 0, 0, 0 ) );
        cout << "Dlugosc kolejki klientow  po wstawieniu" << clientvector.size() << endl;
        cout << "ID " << clientvector[ iterator ].ID << endl;
        cout << "Start " << clientvector[ iterator ].start << endl;
        cout << "gdzie " << clientvector[ iterator ].gdzie << endl;
        cout << "Kiedy chce wyjechac " << clientvector[ iterator ].when_whant << endl;
        cout << "Jest tutaj " << clientvector[ iterator ].is_here << endl;
       
        airclientvector.push_back( iterator );
        iterator++;
    }
    int length = airclientvector.size();
    cout << "Kolejka na lotnisku ma: " << length << endl;
    for( int i = 0; i < length; i++ )
    {
        cout << "przenosze na przystanek" << endl;
        cout << "kolejka na przystanku ma: " << clientvector.size() << endl;
        cout << "Przenosze pasazera o id: " << airclientvector[ i ] << endl;
        cout << "Jego polozenie to: " << clientvector[ airclientvector[ i ] ].is_here << endl;
        if( clientvector[ airclientvector[ i ] ].is_here == 1 )
        {
            cout << "jestem w ifie" << endl;
            clientvector[ airclientvector[ i ] ].is_here = 2; // przeniesienie na przystanek
            cout << "zmienilem flage polozenia" << endl;
            cout << "klade do przystanku klienta: " << airclientvector[ i ] << endl;
            stationvector.push_back( airclientvector[ i ] );
        }
    }
    //cout<<"Kolejka na przystanku pod lotniskiem ma: "<<clientvector.size()<<endl;
    airclientvector.clear();
    length = airclientvector.size();
}


I teraz mam problem z odwołaniem: clientvector[iterator].ID;
iterator to int i wydaje mi się że w sposób jaki zapisałem powinno odwołać się do elementu w wektorze na pozycji iterator i wyświetlić jego ID ale tak się nie dzieje bo wyświetla losową liczbę.
Gdy wyświetlam wszystkie zmienne w konstruktorze Client to podstawiane są prawidłowo lecz gdy chcę się odwołać poprzez iterator do klienta z określonej pozycji w clientvector to już ich nie wyświetla.
Ktoś z was wie w czym tkwi błąd? Będę wdzięczny za wszelką pomoc.
P-92346
Monika90
» 2013-09-20 11:38:37
starta, gdziea, when_whanta, when_finisha, is_herea, prioryteta, go_or_backa
To najśmieszniejsze nazwy zmiennych jakie w życiu widziałam. when whanta prioryteta? W jakim to jezyku?

A twój konstruktor klasy Client jest zupełnie bez sensu, konstruktor powinien zainicjalizować składowe obiektu, a twój w ogóle nic nie robi.
P-92347
mab
Temat założony przez niniejszego użytkownika
» 2013-09-20 13:03:34
Konstruktor podstawie pod zmienne w nim się znajdujące odpowiednie z parametrów z którymi został wywołany.
A dziwne nazwy wynikają z dodania 'a do nazwy zmiennej pod którą jest podstawiany dany parametr. Występują one tylko w konstruktorze więc ich dziwne nazwy nie sprawiają mi kłopotu w innych częściach programu.

Ale wracając do meritum problemu w jaki sposób się odwołać do poszczególnej zmiennej z klasy Client mając do dyspozycji wektor z obiektami typu Client.
P-92350
pekfos
» 2013-09-20 13:13:54
wyświetlić jego ID ale tak się nie dzieje bo wyświetla losową liczbę.
Skoro nie ustawiasz ID..
P-92351
mab
Temat założony przez niniejszego użytkownika
» 2013-09-20 13:24:48
Pod ID podstawiam IDa. Czyli w wywołaniu konstruktora jest tam zmienna iterator typu int.
P-92352
DejaVu
» 2013-09-20 13:33:08
Podstawiasz wartości do zmiennej lokalnej, która istnieje tylko i wyłącznie w czasie wykonywania konstruktora, a nie do zmiennej, która należy do obiektu klasy.
P-92353
mab
Temat założony przez niniejszego użytkownika
» 2013-09-20 13:39:36
Dziękuję :) w klasie Client też były takie zmienne tylko w konstruktorze niepotrzebnie podawałem jeszcze raz ich typy. Teraz wszystko działa poprawnie. Jeszcze raz dziękuję.
P-92354
« 1 »
  Strona 1 z 1