Ошибка 3 ошибка C2440: «инициализация»: невозможно преобразовать из «void *» в «Socket *»

0

У меня проблема, когда я конструктор по умолчанию 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);
        }

    }
  • 0
    Что такое SOCKET ?
  • 0
    typedef UINT_PTR SOCKET;
Показать ещё 1 комментарий
Теги:
sockets
winsock2

2 ответа

1
Лучший ответ

Почему вы явно вводите литье в void *

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

Должно быть,

Socket sock = in.Accept();

Accept возвращает SOCKET. Нет необходимости преобразовывать его в void * или Socket *

-1

В C++, в отличие от C, void* не может быть неявно преобразован в указатель на объект. Вместо этого вы должны напрямую нанести на целевой тип указателя:

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

Примечание. Предпочитаете C++ -стиль отличает отливки в стиле C. Они более ясны в своем намерении, и их легче искать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню