Vector wskaźników na obiekty
Ostatnio zmodyfikowano 2014-01-05 23:25
Nin Temat założony przez niniejszego użytkownika |
Vector wskaźników na obiekty » 2012-03-07 11:41:27 Witam Przetrząsnąłem pół internetu szukając odp na mój problem, ale niestety nigdzie nie znalazłem nic użytecznego. Robię projekt z bibliotek STL i umyśliłem sobie zrobić program symulujący bazę danych biblioteki. Mam taki kod głównej klasy programu: class CBibl { static CBibl * bib; vector < COsoba *> uzytkownicy; vector < CKsiazka *> ksiazki; CBibl(); public: static CBibl * start(); void dodajks( CKsiazka * ); void dodajos( COsoba * ); (...) }
kod klasy COsoba: class COsoba { string imie; string nazwisko; CKsiazka * ks[ limit ]; public: COsoba( string a, string b ) : imie( a ) , nazwisko( b ) { ks[ 0 ] = 0; } } No i gdy w głównym programie próbuję zacząć zapełniać bazę, tj dodawać pojedyncze elementy do vectorów uzytkownicy i ksiazki poprzez metodę: void CBibl::dodajos( COsoba * a ) { uzytkownicy.push_back( a ); } Następuje błąd pamięci: Unhandled exception at 0x00fe7c99 in stl.exe: 0xC0000005: Access violation reading location 0x0000001c.
Próbowałem dodawać konstruktory kopiujące (chociaż moim zdaniem nie są w tym konkretnym przypadku potrzebne), zmieniać vector wskaźników na vector obiektów, usuwać wszelkie zmienne dynamiczne w klasach CKsiazka i COsoba, używać inteligentnych wskaźników. Nic nie pomaga. Gdyby nie to, że projekt dotyczy konkretnie bibliotek STL to użyłbym zwykłych dynamicznych tablic, ewentualnie obudowanych w jakąś prostą klasę narzędziową. |
|
DejaVu |
» 2012-03-07 12:00:11 Wklej wiersze w których wywołujesz metodę dodającą rekordy.
/edit:
Już w samych deklaracjach klas masz taki sajgon, że mam poważne wątpliwości czy wiesz w ogóle co robisz. Zapewne linijka ks[ 0 ] = 0; wywala aplikację. |
|
Nin Temat założony przez niniejszego użytkownika |
» 2012-03-07 12:50:47 Metode wywoluje poprzez wyrazenie dodajos( new COsoba( a, b ) ) gdzie a,b to dane podane przez uzytkownika, obiekt jest tworzony i przekazywany poprawnie, sprawdzalem to. Poza tym przy tworzeniu obiektu klasy CKsiazka jest to samo, a tablica wskaznikow tam nie wystepuje. W moim rozumieniu vectorow zawierajacych wskazniki, nie powinno interesowac na co wskazuja poszczegolne skladowe, nie jest to po prostu dyn tablica adresow? W przypadku bledow w samych obiektach program powinien sie chyba wywalac dopiero w momencie proby odwolania do nich? Nie mowie, ze jestem jakims ekspertem, dlatego tez napisalem po pomoc ;p. |
|
Estivo |
» 2014-01-05 23:25:50 Za mało kodu by coś wywróżyć. Poza tym CKsiazka * ks[ limit ]; ile wynosi limit i co to w sumie jest? |
|
« 1 » |