[C++]Zaprzyjaźnianie klas


(Kalin 93) #1

Mam sobie taki o to fragment kodu :

class Menu

{

public:

	Menu();

	~Menu();

	void WyswietlMenu();

friend class GFX;

friend class Gra;

};

i następnie chce się odwołać z klasy Menu do metody z klasy GFX w ten sposób :

GFX::DodajObraz (0,100,GFX::StworzText ("Wyjdz z gry",Kolor));

I dostaje błąd kompilacji:

error C2352: 'GFX::StworzText' : illegal call of non-static member function

Jakieś pomysły ? :stuck_out_tongue:


(Quentin) #2

Funkcja DodajObraz w klasie GFX jest statyczna :?: Bo wg kompilatora nie bardzo...


(Kalin 93) #3

Ale co się zmieni z metodami, zmiennymi jesli dodam przed nie słówko static, mógłbyś to objaśnić ?


(etam) #4

http://www.cplusplus.com/doc/tutorial/classes2/#static

Wydaje mi się, że chcesz zrobić coś nie tak i na około.

Chyba chcesz zrobić tak:

GFX gfx;

gfx.DodajObraz (0,100,gfx.StworzText ("Wyjdz z gry",Kolor));

Oczywiście nie powinieneś konstruować gfx lokalnie, tylko musisz go przekazywać przez referencję.


(Kalin 93) #5

Myślałem o czymś innym, w funkcji main najpierw tworze wskaźnik do klasy GFX a potem wskaźnik do klasy Menu.

game.obj : error LNK2001: unresolved external symbol "private: static struct _TTF_Font * GFX::Czcionka" (?Czcionka@GFX@@0PAU_TTF_Font@@A)

game.obj : error LNK2001: unresolved external symbol "private: static struct SDL_Surface * GFX::Out" (?Out@GFX@@0PAUSDL_Surface@@A)

Takie błędy teraz pokazuje mi kompilator.