我正在使用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
?
答案 0 :(得分:18)
使其符合全球条件:::bind(...)
(并确保包含所有正确的标题)。
using namespace std;
更改为多个using <thing>
,例如:
using std::cout;
using std::endl;
using std::string;
// etc.
这可以让你的旧代码编译,而不会将std::bind
带入全局命名空间。