Ĺ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
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!