C++ 错误C2678:二进制'==';:未找到接受左手操作数的运算符

C++ 错误C2678:二进制'==';:未找到接受左手操作数的运算符,c++,operators,winsock2,C++,Operators,Winsock2,我不明白为什么会出现这个错误,但是同一个类在VS15下工作得很好现在我使用的是VS12,它是一个简单的Winsock2实现 int Net::createServer(int port, int protocol) { int status; // ----- Initialize network stuff ----- status = initialize(port, protocol); if (status != NET_OK) ret

我不明白为什么会出现这个错误,但是同一个类在VS15下工作得很好现在我使用的是VS12,它是一个简单的Winsock2实现

int Net::createServer(int port, int protocol) 
{
    int status;

    // ----- Initialize network stuff -----
    status = initialize(port, protocol);
    if (status != NET_OK)
        return status;

    localAddr.sin_addr.s_addr = htonl(INADDR_ANY);    // listen on all addresses

    // bind socket
    if (bind(sock, (SOCKADDR *)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
    {
        status = WSAGetLastError();          // get detailed error
        return ((status << 16) + NET_BIND_FAILED);
    }
    bound = true;
    mode = SERVER;

    return NET_OK;
}
控制台日志:

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::_Bind<_Forced,_Ret,_Fun,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,<unnamed-symbol>>' (or there is no acceptable conversion)
1>          with
1>          [
1>              _Forced=false,
1>              _Ret=void,
1>              _Fun=SOCKET &,
1>              _V0_t=SOCKADDR *,
1>              _V1_t=size_t,
1>              _V2_t=std::_Nil,
1>              _V3_t=std::_Nil,
1>              _V4_t=std::_Nil,
1>              _V5_t=std::_Nil,
1>              <unnamed-symbol>=std::_Nil
1>          ]
错误C2678:二进制“==”:未找到接受“std::\u Bind”类型左侧操作数的运算符(或没有可接受的转换)
1> 与
1>          [
1> _Forced=false,
1> _Ret=无效,
1> _Fun=插座&,
1> _V0_t=SOCKADDR*,
1> _V1_t=尺寸,
1> _V2_t=std::_Nil,
1> _V3_t=std::_Nil,
1> _V4_t=std::_Nil,
1> _V5_t=std::_Nil,
1> =std::Nil
1>          ]
(这里有一点信心的飞跃,但我很确定我做对了)。 出现错误的原因是程序中的某个地方有一个
using namespace std
语句(这是一件可怕的事情!),现在BSD套接字
bind()
函数与STL
std::bind
函数冲突

一劳永逸地停止使用
使用namespace std
语句,问题就会消失。否则,您必须限定从哪个命名空间中提取
bind()
,在本例中为全局命名空间:

if (::bind(sock, (SOCKADDR *)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)

你使用Winsock的代码在Ubuntu下工作?令人印象深刻…是的,是的,这是一个错误,请发布一个,而不是这么大的代码转储。另外,您的include-guard是非法的:bind()的签名是什么
if (::bind(sock, (SOCKADDR *)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)