编写socket网络通信程序的时候,在服务端用到bind函数进行绑定,写了如下语句
if (SOCKET_ERROR == bind(m_listen, (struct sockaddr*)&sin, sizeof(sin))){
cout << "绑定失败!" << endl;
closesocket(m_listen);
return 0;
}
但是编译的时候一直出现下面的问题:
错误 C2678 二进制“==”: 没有找到接受“int”类型的左操作数的运算符(或没有可接受的转换)
错误 E0349 没有与这些操作数匹配的 "=="运算符
解决方法
出错原因是std库里面也有bind函数,由于我在开头使用了using namespace std; 所以编译器认为我写的bind是std里面的bind,因此也就会报错。
有两种解决方法:
- 在bind前面加上 域操作符:: , 也就是 ::bind,这样就可以调用socket的bind了。
- 不要写using namespace std; 需要用到的时候再写std::
最后写成下面这样:
if (SOCKET_ERROR == ::bind(m_listen, (struct sockaddr*)&sin, sizeof(sin))){
cout << "绑定失败!" << endl;
closesocket(m_listen);
return 0;
}