[c++] Zapis do plików xml przy pomocy getterów
Ostatnio zmodyfikowano 2018-02-09 21:56
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. void Income::setAmount( float a ) { amount = a; } 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" ); } }
|
|
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. |
|
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. |
|
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. |
|
« 1 » |