变量或字段 'nameOfVariable' 声明为 void 不知道为啥 :(

Posted

技术标签:

【中文标题】变量或字段 \'nameOfVariable\' 声明为 void 不知道为啥 :(【英文标题】:Variable or Field 'nameOfVariable' declared void no idea why :(变量或字段 'nameOfVariable' 声明为 void 不知道为什么 :( 【发布时间】:2011-02-05 04:02:52 【问题描述】:

我在各种网站上进行了谷歌搜索和搜索,但我无法弄清楚为什么我的某个功能会出现以下错误。

错误:变量或字段“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;

【问题讨论】:

Socket(注意大写S和小写ocket)定义在哪里? 【参考方案1】:
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() 中的相关编译器错误,您的代码至少可以编译。至于有没有用……

【讨论】:

FFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUU!!!!!!!!!当我犯这种错误时我讨厌它>_

以上是关于变量或字段 'nameOfVariable' 声明为 void 不知道为啥 :(的主要内容,如果未能解决你的问题,请参考以下文章

C ++接收纯虚函数错误,“变量或字段'x'声明为void”[关闭]

带有 std::map 的模板函数给出错误:声明为 void 的变量或字段

C++ SPDLOG 编译错误:变量或字段“set_error_handler”声明为无效

C#字段属性的特性

SQLserver 怎么声明变量?

C#中在哪里声明全局变量啊,具体位置在哪儿,我是初学者。。。