如何区分sys / sockets.h和std :: bind中的bind()?

时间:2011-07-01 17:53:38

标签: c++ g++

我正在使用g ++ 4.6.0编译在早期版本中成功编译的一些C ++代码。

if ( bind(iControl, (struct sockaddr *) &sa, sizeof(sa)) == -1)
  throw runtime_error ("bind");

其中iControl是套接字,sa是struct sockaddr_in

但是,在g ++ 4.6中,我收到以下错误:

comms.cpp:93:66: error: no match for ‘operator==’ in ‘std::bind(_Functor&&, _ArgTypes&& ...) [with _Functor = int&, _ArgTypes = {sockaddr*, long unsigned int}, typename std::_Bind_helper<_Functor, _ArgTypes>::type = std::_Bind<int(sockaddr*, long unsigned int)>]((* &((sockaddr*)(& sa))), (* &16ul)) == -0x00000000000000001’

comms.cpp:93:66:注意:候选人是:

接下来是大约一页半的候选人。

似乎是将sys/sockets.h中的绑定函数与functional中的std :: bind混合在一起。如何在不重写整个源文件的情况下消除歧义,以删除using namespace std

1 个答案:

答案 0 :(得分:18)

使其符合全球条件:::bind(...)(并确保包含所有正确的标题)。

编辑:(我从@Bo Persson的评论中得到了这个想法) 另一个可靠的选择是将using namespace std;更改为多个using <thing>,例如:

using std::cout;
using std::endl;
using std::string;
// etc.

这可以让你的旧代码编译,而不会将std::bind带入全局命名空间。