错误3:'initializing':不能从'void *'插座*'

Error 3 error C2440: 'initializing' : cannot convert from 'void *' to 'Socket *'

本文关键字:插座 void 不能 错误 initializing      更新时间:2023-10-16

我有问题,当我实现默认构造函数,但我有错误

错误3错误C2440: '初始化':无法从'void *'转换为'Socket *' Webserver.h 164 1 Project2_SocketLib

Socket.h
    //SOCKET Accept(sockaddr* clientInfo,int* clientInfoSize)
    SOCKET Accept()
    {
        static int size = sizeof(sockaddr);
        return accept(this->hSocket, 0,0);
    }
Webserver.h
    Webserver(short port_to_listen,request_func rf,HWND Hwnd, WPARAM wParam, LPARAM lParam)
    {
        Socket in(port_to_listen,"INADDR_ANY", true, Hwnd, true);
        //request_func = rf;
        while (1) {
            Socket* ptr_s =(void*) in.Accept();
            unsigned ret;
            _beginthreadex(0,0,Request, ptr_s,0,&ret);
        }
    }

为什么要显式地将类型转换为void *

 Socket* ptr_s =(void*) in.Accept();

,

Socket sock = in.Accept();

Accept返回SOCKET。不需要转换为void *Socket *

我希望这能起作用

Socket* ptr_s =static_cast<Socket*>( in.Accept());

在c++中,与C语言不同,void*不能隐式地转换为指向对象的指针。相反,应该直接转换为目标指针类型:

Socket* ptr_s = reinterpret_cast<Socket*>(in.Accept());

注意:选择c++风格的强制转换而不是C风格的强制转换。