我正在使用g ++ 4.6.0来编译在早期版本中成功编译的一些C++代码.
if ( bind(iControl, (struct sockaddr *) &sa, sizeof(sa)) == -1)
throw runtime_error ("bind");
Run Code Online (Sandbox Code Playgroud)
其中iControl是套接字,sa是a 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’
Run Code Online (Sandbox Code Playgroud)
comms.cpp:93:66:注意:候选人是:
接下来是大约一页半的候选人.
它似乎是将sys/sockets.hstd :: bind in中的bind函数混合在一起functional.如何在不重写我要移除的整个源文件的情况下消除歧义using namespace std?
Mar*_*k B 18
使其符合全球要求:( ::bind(...)并确保包含所有正确的标题).
编辑:(我从@Bo Persson的评论中得到了这个想法)另一个可靠的选择是using namespace std;改为几个using <thing>:
using std::cout;
using std::endl;
using std::string;
// etc.
Run Code Online (Sandbox Code Playgroud)
这使您的旧代码可以编译,而不会std::bind进入全局命名空间.
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |