std :: bind c ++ в операторе if - PullRequest
0 голосов
/ 22 января 2020

Я работаю с устаревшим кодом для школьного проекта и пытаюсь перехватить, если std :: bind завершится неудачно. Это код, который в настоящее время находится в проекте (не написан мной), который выдает ошибку «C ++, оператор не соответствует этим операндам» в VS 2019. Я попытался сравнить с bool, который, как он говорит, возвращает std :: bind no безрезультатно.

if ( bind( socket, (const sockaddr*) &address, sizeof(sockaddr_in) ) < 0 )
{
    printf( "failed to bind socket\n" );
    Close();
    return false;
}

Как еще можно правильно перехватить, если std :: bind завершится неудачно в операторе if?

1 Ответ

4 голосов
/ 22 января 2020

Функция C ++ std::bind() не возвращает значение при ошибке, вместо этого выдается исключение.

Но показанный вами код НЕ пытается использовать std::bind() в все, на самом деле он пытается использовать вместо этого функцию WinSock bind(), но не может, потому что std::bind() находится в области видимости из-за предыдущего оператора using namespace std; или using std::bind; (скорее всего, прежний), и поэтому компилятор пытается вызвать std::bind().

Вам необходимо либо избавиться от оператора using , либо префикс вызова bind() с помощью оператор разрешения области видимости :: global :

if ( ::bind( socket, (const sockaddr*) &address, sizeof(sockaddr_in) ) < 0 )
...