Łączenie plików nagłówkowych - jedna klasa koRZysta z drugiej?

0

Witam! Mam problem z odpowiednim połączeniem modułów klas... Szukałem informacji w internecie na ten temat, ale mało co zrozumiałem jeżeli już coś znalazłem. Rysunek:

http://www22.zippyshare.com/v/58526268/file.html

Tak to wygląda, muszę tak połączyć to wszystko do kupy żeby:
a) obiekt serwera i gui był dostępny w CSerwer.cpp i w CGUI.cpp
b) żeby klasy mogły wzajemnie z siebie kokoRZystaćystać
c) żeby oba obiekty klas byly dostepne w main.cpp

Do tej pory, jak pisałem te klasy oddzielnie robiłem w ten sposób

main.cpp : include "main.h"
main.h: include "CGUI.h"
CGUI.h: extern CGUI* c_GUI;
main.cpp: CGUI* c_GUI;

W ten sposób obiekt c_GUI jest dostępny w main.cpp i w CGUI.cpp, ale nijak nie wiem jak to połączyć do kupy ;/. Będę wdzięczny za pomoc. pozdro ;)

0

Lekcje na dziś:

  • zapominamy o istnieniu zmiennych globalnych
  • zapominamy o istnieniu extern
  • czytamy o tym co to jest Singleton
0

odnośnie punktu b) "żeby klasy mogły wzajemnie z siebie kokoRZystaćystać", popatrz tu.

0

Ok, sory panowie za tego byka ;/.

@Shalom
Wiem co to jest singleton, wiem jak sie go tworzy bo nawet zakladalem temat na tym forum z niejasnosciami. Fakt, po zapoznaniu się z linkiem Marka zauważam zastosowanie :)

@MarekR22
Jeżeli dobrze rozumiem to mam trochę kodu do poprawy, każda metoda klasy X która będzie operowała na klasie Y ma jako parametr przyjmować wskaźnik na obiekt tej klasy? Na przyszłość mam się trzymać tej zasady czy są jeszcze jakieś koncepcje?

Edit
W dalszym ciągu nie ogarniam tego... Nie rozumiem chyba tego laczenia ;/. Daje do main.h include CGUI.h i CSerwer.h, ok w main.cpp mam juz widoczne klasy ale co mi po tym? Musze miec klase CGUI widaczna w CSerwer.cpp i klase CSerwer w CGUI.cpp. Da się w ogóle to osiągnąć bez dolaczania CSerwer.h w CGUI.h i na odwrot?

EDIT
w CGUI.h daje: class CSerwer;
#include "Server.h"

w CSerwer.h daje: class CGUI;
#include "GUI.h"

w main.h include "CSerwer.h", include "CGUI.h"

w kazdym pliku naglowkowym daje #define WIN32_LEAN_AND_MEAN

Wszystko sie kompiluje, ale czy tak moze byc? Zakladam ze nie jest to poprawny sposob...

0

Przede wszystkim:

Server.h

class CSerwer
{
	// ...
};

Server.cpp

#include "Server.h"
#include "GUI.h"

// ...

GUI.h

class CGUI
{
public:
	static CGUI *Get(); // funkcja ma zwrócić obiekt CGUI (zamiast zmiennej globalnej)
	// ...
};

GUI.cpp

#include "GUI.h"
#include "Server.h"

// ...

main.cpp

#include "GUI.h"
#include "Server.h"

// ...
CGUI *cgui = CGUI::Get();
cgui->RobCostam();
//...

W razie potrzeby możesz umieścić #include "Server.h" w GUI.h lub #include "GUI.h" w Server.h, z tym, że albo jedno, albo drugie.

0

Wielkie dzięki za pomoc! Zaraz poprawię includy, ma ktoś może link do artykułu na temat łączenia plików? Jak widać nie bardzo ogarniam temat, a chciałbym ; )

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