Двоичный файл '==': оператор не найден - TCP Socket SFML - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь перебрать std::list<sf::TcpSocket> clients и удалить отключенные из sf::SocketSelector и из самого списка.При попытке удалить клиента из списка, используя итератор, я продолжаю получать ошибку «двоичный» == «оператор не найден».Это часть кода, где ошибка вызывается из:

std::list<sf::TcpSocket> clients;
std::list<sf::TcpSocket>::iterator i;

for (auto i = clients.begin(); i != clients.end();)
{
    if (selector.isReady(*i))
    {
        sf::Socket::Status status = i->receive(dummy, 1, received);
        if (status != sf::Socket::Done)
        {
            if (status == sf::Socket::Disconnected)
            {
                selector.remove(*i);
                clients.remove(*i);  // this causes the error
            }
        }
        else
        {
            //i++;
        }
    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Удалите объект с его итератором, он у вас уже есть:

std::list<sf::TcpSocket> clients;
std::list<sf::TcpSocket>::iterator i;

for (auto i = clients.begin(); i != clients.end();)
{
    if (selector.isReady(*i))
    {
        sf::Socket::Status status = i->receive(dummy, 1, received);
        if (status != sf::Socket::Done)
        {
            if (status == sf::Socket::Disconnected)
            {
                selector.remove(*i);
                i = clients.erase(i); // Properly update the iterator
            }
        }
        else
        {
            ++i;
        }
    }
}
...