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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值