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

[c++] Zapis do plików xml przy pomocy getterów

Ostatnio zmodyfikowano 2018-02-09 21:56
Autor Wiadomość
Khyho
Temat założony przez niniejszego użytkownika
[c++] Zapis do plików xml przy pomocy getterów
» 2018-02-09 20:46:13
Cześć,

Tworze właśnie program do organizacji budżetu domowego w obiektowym c++. Dopóki nie zastosowałem getterów i setterów tylko miałem publiczne zmienne to wszystko było super. Lecz w momencie ich zastosowania zaczęły się schody. Mam np. obiekty reprezentujące konkretne przychody. Wszystkie są zapisane w jednym wektorze. W momencie zapisu do pliku xml nie zapisują się każde przychody, a ostatni dodany (będący na końcu wektora) oraz w liczbie tylu przychodów ile rzeczywiście jest w wektorze. Domyślam się, że coś jest źle w getterze tylko nie wiem co dokładnie. Mógłby ktoś pomóc nakierować na właściwe rozwiązanie? :)
Dorzucam kod metody zapisu do pliku xml oraz jeden z getterów.
C/C++
void Income::setAmount( float a ) {
    amount = a;
}

C/C++
void IncomesBook::saveIncomesInTheFile( vector < Income > & incomeCollection ) {
    CMarkup xml;
    xml.AddElem( "IncomesBook" );
    xml.IntoElem();
    string date;
   
    for( vector < Income >::iterator itr = incomeCollection.begin(); itr != incomeCollection.end(); itr++ ) {
        date = createDate( Income::getYear(), Income::getMonth(), Income::getDay() );
       
        xml.AddElem( "Income" );
        xml.IntoElem();
        xml.AddElem( "incomeID", Income::getIncomeID() );
        xml.AddElem( "userID", Income::getUserID() );
        xml.AddElem( "date", date );
        xml.AddElem( "item", Income::getItem() );
        xml.AddElem( "amount", convertFloat( Income::getAmount() ) );
        xml.OutOfElem();
        xml.Save( "incomes.xml" );
    }
}
P-169354
pekfos
» 2018-02-09 21:13:57
W którym miejscu twoim zdaniem takie Income::getItem() ma jakikolwiek związek z wartościami z wektora? Musisz mieć jakieś poważne braki w rozumieniu obiektowości, skoro dodając gettery sprawiłeś, że obiekty nie są w ogóle używane.
P-169355
Khyho
Temat założony przez niniejszego użytkownika
» 2018-02-09 21:17:24
Bardzo możliwe, że tak jest, ponieważ c++ uczę się od pół roku, a obiektówki od 2 tygodni, dlatego piszę tutaj z prośbą o pomoc.
P-169356
pekfos
» 2018-02-09 21:56:59
Z tą pomocą może być ciężko, skoro najwyraźniej nie rozumiesz co się do ciebie pisze.. To, albo odpowiedź powinna składać się z samych zdań prostych, każde w osobnym punkcie. Może wtedy uda się uzyskać odpowiedzi na wszystkie pytania, a nie tylko na coś, co przypadkowo znalazło się na samym końcu wypowiedzi.

W każdym razie.. Jak na 2 tygodnie nie masz żadnego pojęcia o programowaniu obiektowym. Lub dokładniej: traktujesz je jak funkcje i struktury. Byłeś w stanie napisać kod z publicznymi polami, bo to w gruncie rzeczy zwykła struktura. Ale żeby dodać metodę, która ma robić coś tak trywialnego jak ustawić/zwrócić wartość jednego pola w klasie, to już jak widać nie ta liga. Więc zacząłeś kombinować i doszedłeś do czegoś tak głupiego jak postawienie przed wszystkim static. Zmieniłeś itr->amount, na Income::getAmount(). Ze szczególnym uwzględnieniem braku itr w drugim zapisie. Stary kod używał wektora i działał, nowy już nie używa i, zabawna sprawa, nie działa.
P-169357
« 1 »
  Strona 1 z 1