场景说明
int err = bind(sockSrv, (SOCKADDR*)&addrServ, sizeof(SOCKADDR)); //把socket 绑定到指定地址上
编译代码出错提示:
错误 C2440 “=”: 无法从“std::_Binder<std::_Unforced,SOCKET &,SOCKADDR *,unsigned int>”转换为“int”
分析
从std错误提示,说明调用的是std作用域下的函数,而不是winsock库的绑定函数,两个不同的库都定义了相同函数名称和函数参数列表一致的函数,导致调用混乱
而在代码的头文件中引用了std作用域
using namespace std;
导致编译调用std::bind出现的问题
解决方案
int err = ::bind(sockSrv, (SOCKADDR*)&addrServ, sizeof(SOCKADDR)); //把socket 绑定到指定地址上
bind前面加冒号,说明是全局作用域函数调用,而不是std::bind函数调用
反思
一般不用using namespace std;而是在调用的时候指定,例如
std::string
std::cout
转自:https://blog.51cto.com/fengyuzaitu/4925426