Winsock z uzyciem klas

0

Stworzylem prosty serwer na winsocku (wklejajac praktycznie wszystko pokolei w maina), wszystko dziala jak nalezy. Gdy chce stworzyc to samo, ale przy uzyciu klasy serwera (co pozniej ulatwi prace) pierwsze bledy pojawiaja sie juz na poczatku.

normalnie poczatek wygladal tak:

//pliki naglowkowe i strukt sChat
int numer_wiadomosci=1;
sChat* tablica_przenosna;
int main(int argc, char *argv[])
{
 tablica_przenosna=new sChat[numer_wiadomosci];   
    // Inicjalizacja winsock
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2),&wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");
    // koniec Inicjalizacji winsock
//dalszy kod

gdy to samo chce przeniesc na klasy pojawia sie blad

cSerwer::cSerwer()
{
	numer_wiadomosci=1;
	tablica_przenosna=new sChat[numer_wiadomosci];

}
void cSerwer::initialize() //blad na tej metodzie
{
	WSADATA wsaData ;
	int iResult=WSAStartup(MAKEWORD(2,2),&wsaData);
	if(iResult!=NO_ERROR)
		printf("Blad w funkcji WSAStartup()\n");
}
Error	1	error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function "public: void __thiscall cSerwer::initialize(void)" (?initialize@cSerwer@@QAEXXZ)	sChat.obj

Nie za bardzo wiem jak sie do rozwiazania tego bledu zabrac nawet (nawet jak dla Was wyda sie trywialny, dla mnie stawowi poki co problem nie do przejscia).
Z gory dzieki za jakakolwiek pomoc.

0

Podlinkuj sobie ws2_32.lib, poniewaz linker nie wie gdzie jest WSAStartup, nie napisales czym kompilujesz, ale jesli g++ to
g++ plik.cpp -o plik -lws2_32
natomiast, jesli korzystasz z jakiegos srodowiska, a nie tak kompilujesz to dodaj w opcjach linkera ta biblitoeke.

0

Z gory wybaczcie, ze tak mecze, ale po prostu bez tego nie rusze dalej a ruszyc musze (koniecznie :/).
Dodalem, dziala (w sumie glupota, ze o tym zapomnialem). Stop w kolejnym miejscu:

fragment dzialajacego serwera

    
// wczesniej to co w pierwszym poscie
// koniec Inicjalizacji winsock    
    // Tworzenie gniazda
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( m_socket == INVALID_SOCKET ) 
{
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return m_socket;
}

fragment z serwerem na klasach

SOCKET create() //tworzenie gniazda
{
	SOCKET m_socket;
	m_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(m_socket==INVALID_SOCKET) 
	{
		printf("Blad w socket(): %ld\n",WSAGetLastError());
		WSACleanup();
		exit(-1);
	}
	return m_socket;
}

i wywolanie create w mainie

//cSerwer serwer;
serwer.initialize(); 
SOCKET m_socket=serwer.create();//i w momencie dodania tej linijki wyskakuje blad
Error	1	error LNK2019: unresolved external symbol "public: unsigned int __thiscall cSerwer::create(void)" (?create@cSerwer@@QAEIXZ) referenced in function _main	serwer.obj
0

Odkomentuj ta linijke, w ktorej tworzysz obiekt klasy cSerwer, bo bez tego jesli metody nie beda statyczne to ich nie wywolasz oraz jesli ta funkcja creat jest metoda klasy cSerwer to dodaj po void w jej naglowku przy definicji takie cus cSerwer::.
Natomiast, jesli ta funkcja create nie ma nalezec do klasy to wywolaj ja normalnie, a nie przez obiekt tej klasy.

w ogóle to odsylam po podstawy, a nie z takimi pytaniami na forum, poniewaz widac ze nie znasz podstaw obiektowosci cpp.

0

nie po void, a po SOCKET dodaj...

0

Zabij mnie ;)
Swoich bledow sie zazwyczaj nie widzi, tym bardziej tym najbardziej trywialnych. cSerwer:: nie dodane przez moja wlasna glupote. Linijka z tworzeniem serwera byla oczywiscie w programie odkomentowana, maly blad przy kopiowaniu kodu na forum. Poki co wszystko dziala i mam nadzieje, ze tak zostanie ;)
Mimo zjechania mnie, dzieki za pomoc ;)

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