Переменная или поле 'nameOfVariable' объявлены пустыми, не знаю почему :( - PullRequest
0 голосов
/ 05 февраля 2011

Я гуглил и искал на разных сайтах, и я не могу понять, почему я получаю следующие ошибки от одной из моих функций.

ошибка: переменная или поле 'ConnectClient' объявлено пустым

ошибка: «Сокет» не был объявлен в этой области

Обе эти ошибки относятся к строке 38 моего кода, которая является ...

void ConnectClient(Socket _newConnection)

Из того, что я понял из других постов, задающих этот вопрос, обычно это сводилось к несоответствиям с файлом заголовка (который я НЕ использую для этого небольшого теста), или у них был тип возврата вфункция void, которой у меня нет.

ПРИМЕЧАНИЕ. Я удалил лишние фрагменты кода, относящиеся к части кода игры, и стопки закомментированного кода, который я тестировал.Эта программа - небольшой тест на использование winsock

#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;
}

1 Ответ

2 голосов
/ 05 февраля 2011
void ConnectClient(Socket _newConnection)
{
    int slotIndex = FindFreePlayerSpot();
    if (slotIndex == -1)
    {
        closesocket(_newConnection);
        cout << "No player slots available, connection aborted"
    }

Две проблемы здесь.

1) Это должна быть розетка, а не розетка.

2) Вам не хватает точки с запятой (;) в конце приведенного выше оператора cout.

Исправьте эти две ошибки, указанные выше, связанные ошибки компилятора в main () и ваш код по крайней мере скомпилируется. Что касается того, работает это или нет ...

...