VS2017网络编程中bind冲突问题

编写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,因此也就会报错。
有两种解决方法:

  1. 在bind前面加上 域操作符:: , 也就是 ::bind,这样就可以调用socket的bind了。
  2. 不要写using namespace std; 需要用到的时候再写std::

最后写成下面这样:

if (SOCKET_ERROR == ::bind(m_listen, (struct sockaddr*)&sin, sizeof(sin))){
     
	cout << "绑定失败!" << endl;
	closesocket(m_listen);
	return 0;
}

你可能感兴趣的:(错误,网络编程,socket,c++)