2011-02-05 5 views
0

내가 봤 한 이유를 아무 생각 무효 선언되지 및 다양한 웹 사이트에서 검색 및 내 기능 중 하나에서 다음과 오류를 얻을 왜 작동하지 수변수 또는 필드 'nameOfVariable은':(

오류가 발생했습니다. : 변수 또는 필드 'ConnectClient'무효

오류를 선언 : '소켓'는 이러한 오류의

모두가 내 코드의 라인 (38)위한이 범위에서 선언되지 않았습니다 ...

void ConnectClient(Socket _newConnection) 

이 질문에 대해 묻는 다른 게시물에서 알 수 있듯이 일반적으로 헤더 파일 (이 작은 테스트에서는 사용하지 않음)과 일치하지 않거나 void 함수에서 반환 형식이 있습니다. 나는 없다.

참고 : 게임 코드의 일부와 관련된 코드와 주석 처리 된 코드 스택을 제거했습니다. 이 프로그램은 윈속에 약간의 테스트가 여기

#include <iostream> 
#include <winsock2.h> 

using namespace std; 
const int serverPort = 31337; 
const int serverMaxClients = 10; 
SOCKET serverSocket; 
SOCKET clientSocketArray[serverMaxClients]; //should this have a -1 on it? 

bool clientSlotTaken[serverMaxClients]; 
sockaddr clientSocketAddresses[serverMaxClients]; 

int FindFreePlayerSpot() 
{ 
    for (int slotIndex = 0; slotIndex < serverMaxClients; slotIndex++) 
    { 
     if (clientSlotTaken[slotIndex] == false) 
     { 
      return slotIndex; 
     } 
    } 
    return -1; 
} 

void ConnectClient(Socket _newConnection) 
{ 
    int slotIndex = FindFreePlayerSpot(); 
    if (slotIndex == -1) 
    { 
     closesocket(_newConnection); 
     cout << "No player slots available, connection aborted" 
    } 
    else //Should have a connection 
    { 
     clientSocketArray[slotIndex] = _newConnection; 
     if (clientSocketArray[slotIndex] == INVALID_SOCKET) 
     { 
      cout << "Client Connection Error - INVALID SOCKET " << WSAGetLastError(); 
     } 
     else //Client should have connected 
     { 
      cout << "Client Connected on socket slot [" << slotIndex << "] from " << "\n"; 
      clientSlotTaken[slotIndex] = true; 
     } 
    } 
} 

void StartWinSock() 
{ 
    WSADATA WsaDat; 
    if(WSAStartup(MAKEWORD(2,2),&WsaDat)!=0) 
    { 
     std::cout<<"WSA Initialization failed!\r\n"; 
     WSACleanup(); 
     system("PAUSE"); 
    } 

    serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
    if(serverSocket==INVALID_SOCKET) 
    { 
     std::cout<<"Server Socket creation failed.\r\n"; 
     WSACleanup(); 
     system("PAUSE"); 
    } 

    SOCKADDR_IN serverInf; 
    serverInf.sin_family=AF_INET; 
    serverInf.sin_addr.s_addr=INADDR_ANY; 
    serverInf.sin_port=htons(serverPort); 

    if(bind(serverSocket,(SOCKADDR*)(&serverInf),sizeof(serverInf))==SOCKET_ERROR) 
    { 
     std::cout<<"Unable to bind socket!\r\n"; 
     WSACleanup(); 
     system("PAUSE"); 
    } 

    if(listen(serverSocket,SOMAXCONN)==SOCKET_ERROR) 
    { 
     std::cout<<"Unable to Listen!\r\n"; 
     WSACleanup(); 
     system("PAUSE"); 
    } 

    u_long iMode=1; 
    ioctlsocket(serverSocket,FIONBIO,&iMode); 
} 


int main() 
{ 
    playerShip = new PlayerShip; 
    bool runningServer = true; 

     cout << "Starting WinSock\n"; 
     StartWinSock(); 
     cout << "Running on port " << serverPort << "\n"; 


     while (true) 
     { 
      //Check for a connection 
      Socket newConnection = accept(serverSocket,NULL,NULL); 
      if (newConnection != SOCKET_ERROR) 
      { 
       cout << "Incomming connection attempt"; 
       ConnectClient(newConnection); 
      } 
      Sleep(1); 
     } 


    WSACleanup(); 
    return 0; 
} 
+0

클래스'Socket' (대문자'S'와 소문자'ocket')은 어디에 정의되어 있습니까? –

답변

2
void ConnectClient(Socket _newConnection) 
{ 
    int slotIndex = FindFreePlayerSpot(); 
    if (slotIndex == -1) 
    { 
     closesocket(_newConnection); 
     cout << "No player slots available, connection aborted" 
    } 

두 문제를 사용합니다.

1) Socket이 아닌 SOCKET이어야합니다.

2) 위의 cout 문의 끝에 세미콜론 (;)이 누락되었습니다.

위의 두 오류를 수정하면 main()의 관련 컴파일러 오류가 발생하고 코드가 컴파일됩니다. 그것이 작동하는지 여부에 관해서 ...

+0

FFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUU !!!!!!!!! 내가 그런 종류의 실수를 할 때 나는 그것을 싫어한다.> _ <그것을 지적 해 주셔서 감사합니다 :) – ChiggenWingz

관련 문제