Class pointer v jiné class – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Class pointer v jiné class – C / C++ – Fórum – Programujte.comClass pointer v jiné class – C / C++ – Fórum – Programujte.com

 

Hunty
~ Anonymní uživatel
48 příspěvků
22. 12. 2013   #1
-
0
-

Ahoj, zkouším se trošku hrabat v TCP a snažím se do toho zapojovat i třídy a právě zde jsem narazil na problém. Mám tyto dvě třídy:

class SocketPermit;        // Deklarace SocketPermit 
class SocketConnection;    // Deklarace SocketConnection

class SocketPermit
{
	char* ip;	

	public:
		SocketPermit (SocketConnection *SocketConnectionThread)
		{
			ip = SocketConnectionThread->IP; // Zkopíruj IP adresu z třídy SocketConnection do třídy SocketPermit

			SocketConnectionThread->CloseConnection(); //Ukonči spojejí Soketu z třídy SocketConnection
		}
		
};

class SocketConnection
{
	public:

	char *IP;
	SOCKET client;	
	
	SocketConnection(SOCKET ClientSocket)
	{
		SOCKADDR_IN client_info = {0};
		int addrsize = sizeof(client_info);
		client = ClientSocket;
		
		getpeername(client, (sockaddr*) &client_info, &addrsize);
		IP = inet_ntoa(client_info.sin_addr);
		
		
		SocketPermit SP(this); // "Zavolej" třídu SocketPermit a předej jí odkaz na tuto třídu
	}

	~SocketConnection()
	{
		CloseConnection();
	}

	void CloseConnection()
	{
		closesocket(client);
		cout << "[" << IP << "] Connection closed!" << endl;
	}		
			
};


Snažím se o to, aby třída SocketConnetion předala odkaz sama sebe třídě SocketPermit, která vyhodnotí potřebné informace a popřípadě spustí SocketConnection::CloseConnection().

Pořád se mi to ale nedaří.. 
Hází mi to tyto chyby:

error C2027: use of undefined type 'SocketConnection'
error C2227: left of '->IP' must point to class/struct/union/generic type

Poradí někdo?
Díky

Nahlásit jako SPAM
IP: 77.48.87.–
KIIV
~ Moderátor
+43
God of flame
22. 12. 2013   #2
-
0
-

SocketConnection bude muset byt uz kompletne definovana (ale nemusi tam byt implementace metod) pred tim nez ji pouzijes uvnitr SocketPermit...

takze bud presunout za SocketConnection nebo rozdelit deklaraci definici trid...

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hunty
~ Anonymní uživatel
48 příspěvků
22. 12. 2013   #3
-
0
-

V tomhle případě fakt nevím... i když to "prohodím", pak mi to zase hází, že není definovaná SocketPermit.
Teď teda nechápu, jestli si vystačím čistě jen s dvěma třídama, aby mi to fungovalo tak, jak si představuju.. a nebo musím obě třídy nejdřív nějak deklarovat v jiné funkci...
Nemohl byste spíš napsat kousek kódu?

Nahlásit jako SPAM
IP: 77.48.87.–
KIIV
~ Moderátor
+43
God of flame
22. 12. 2013   #4
-
0
-

no pak uz jedine oddelit tu implementaci .. jinak to dohromady nedas

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
22. 12. 2013   #5
-
0
-

Malo by stacit nieco taketo:

class SocketPermit
{
	char* ip;	

	public:
		SocketPermit (SocketConnection *SocketConnectionThread);
		
};

class SocketConnection
{
	//...		
			
};

SocketPermit::SocketPermit(SocketConnection *SocketConnectionThread){
	ip = SocketConnectionThread->IP; // Zkopíruj IP adresu z třídy SocketConnection do třídy SocketPermit

	SocketConnectionThread->CloseConnection(); //Ukonči spojejí Soketu z třídy SocketConnection
}
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Hunty
~ Anonymní uživatel
48 příspěvků
23. 12. 2013   #6
-
0
-

No, nakonec jsem to celé obešel a udělal jsem to jinak. Vypomohl jsem si funkcemi a jinejými proměnnými.

Díky za pomoc

Hunty

Nahlásit jako SPAM
IP: 77.48.87.–
Hunty
~ Anonymní uživatel
48 příspěvků
23. 12. 2013   #7
-
0
-

Nicméně.. tvoje řešení funguje taky. Díky

Nahlásit jako SPAM
IP: 77.48.87.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý