У меня проблема, когда я конструктор по умолчанию implamante, но у меня есть ошибка
Ошибка 3 ошибки C2440: "initializing": невозможно преобразовать из "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 *
В C++, в отличие от C, void*
не может быть неявно преобразован в указатель на объект. Вместо этого вы должны напрямую нанести на целевой тип указателя:
Socket* ptr_s = reinterpret_cast<Socket*>(in.Accept());
Примечание. Предпочитаете C++ -стиль отличает отливки в стиле C. Они более ясны в своем намерении, и их легче искать.
SOCKET
?