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

Vector wskaźników na obiekty

Ostatnio zmodyfikowano 2014-01-05 23:25
Autor Wiadomość
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:

C/C++
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:
C/C++
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ę:

C/C++
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ą.
P-52158
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ę.
P-52159
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.
P-52162
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?
P-101316
« 1 »
  Strona 1 z 1