std :: map C2678 бинарный '<': не найден оператор, который принимает левый операнд типа 'const sockaddr_in' - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать список клиентов для UDP-сервера.

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include "stdafx.h"
#include <map>
#include <unordered_map>
#include <WS2tcpip.h>
#include <WinSock2.h>
#include <Windows.h>

#pragma comment(lib, "Ws2_32.lib")


std::map<sockaddr_in, int> clientList;

....
void Listen(){
    sockaddr_in client;
    [...]
    if (clientList.find(client) == clientList.end()) {
        printf("Got a new client!\n");
        std::pair<sockaddr_in, uint64_t> item(client, rand());
        clientList.insert(item);
    }
}

Я получаю следующую ошибку:

C2678 binary '<': no operator found which takes a left-hand operand of type 'const sockaddr_in'

Я также попытался использовать unordered_map, который дает мнеследующая ошибка:

C2280 'std::hash<_Kty>::hash(const std::hash<_Kty> &)' :attempting to reference a deleted function

Прекрасно компилируется, когда я только объявляю карту.Кажется, я не могу понять, что не так, поскольку sockaddr_in определяется WinSock2.Я использую VS2017.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...