Forward Declarations

0

Potrzebuję pomocy z czymś co się nazywa Forward Declarations (deklaracje wyprzedzające/zapowiadające?). Znalazłem w sieci taki przykład: http://www.devx.com/tips/Tip/12583

Teoretycznie wygląda to ładnie, ale nie da się zastosować tak prosto w moim przypadku (a może się mylę). Poniżej fragment przykładowego kodu:

class A
{
    int x;
    vector <B> wektor;
    public:
    int pobierzX () const {return x}
} A

class B
{
    int y
    public:
    void metoda (int z)
    {
        if (A.pobierzX() == z)
            y = z;
        else
            y = 0;
    }
};

Jak widać klasa B wymaga istnienia obiektu klasy A, a jedną ze składowych klasy A jest wektor obiektów klasy B. Z tego co wiem, to można przed klasą A dać deklarację zapowiadającą (wyprzedzającą?) klasy B, a w wektorze trzymać nie obiekty, a wskaźniki do niej. Jeśli czegoś nie pokręciłem, to powinno to działać. Pytanie brzmi czy da się to jakoś rozwiązać bez przechodzenia na wskaźniki?

0
class B;

[Twoj kod]
;)

0

To zbyt proste żeby zadziałało (próbowałem), bo nie klasy też nie są tak proste. W klasie A jest też m.in. taka metoda:

class A
{
    (...)
    int metoda2 (int x)
    {
        if (x > 0)
            wektor[x].inna_metoda();
        else
	    return -1;
        return 0;
    }
    (...)
}

I taki Borland C++ Builder 6 zwraca błąd:
"'inna_metoda' is not a member of B, becouse the type is not yet defined."

I tuż przed wysłaniem posta: zawsze mam tak, że jak już zadam pytanie, to odpowiedź sama się pojawia ;-) Po prostu zamiast pisać klasy jednym ciągiem, ciało metody 'metoda2' wrzuciłem po definicji klasy B.

Rozwiązanie proste jak konstrukcja cepa, a ile człowiek czasu straci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1