ďťż

Ładny brzuch

Mój problem jest nastepujący:
Otwarłem nowy projekt w Devie i mam w pewnej klasie taką linijkę
TArea* memory;
gdzie TArea to klasa zdefiniowana przeze mnie. Tą klasę dołaczam na początku kodu.
Gdy próbuję to kompilować wyrzuca mi błąd:
ISO C++ forbids declaration of `TArea' with no type
Jak usunę znak * przy TArea to wyrzuca mi błąd:
`TArea' does not name a type
czyli dla kompilatora klasa TArea nie istnieje. Klasę TArea testowałem wcześniej i wszystko dobrze działało.
Nie wiem skąd ten błąd tu się pojawił.
Pomocy!



możliwe ze klasa TArea jest w kodzie "za" miejscem gdzie chcesz tworzyć objekt typu TArea. Przed klasa w której chcesz utworzyć objekt TArea daj to:
class TArea;

Jeśli korzystasz tylko i wyłącznie z wskaźnika do TArea; tzn. tylko zapis TArea* w tamtym miejscu, i nie kombinujesz z wywoływaniem jakichś funkcji z tego wskaźnika, etc. to możesz użyć tzw. forward declaration:
Piszesz zaraz przed tamtą klasą:

class TArea;

to jest to samo, co deklaracja funkcji - mówi, że takie coś jest. Tylko w wypadku klas nie masz informacji o jej zmiennych i funkcjach składowych [ani o dziedziczeniu, etc.], więc użyć tego można tylko wtedy, gdy chcesz potem zapisać wskaźnik do tej klasy [bo wskaźniki mają zawsze 4 bajty, więc kompilator nie musi wiedzieć co jest wewnątrz TArea].

Powalcz troche, zrozum na intuicję:)
Pozdrawiam.

Zrobiłem jak mówiliście i działa.
Wielkie dzięki!

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •