我正在使用新的libcxx库,我有一个调用套接字函数的代码bind().问题是,当我键入using namespace std;编译器时,给出了以下代码的错误:
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Run Code Online (Sandbox Code Playgroud)
使用clang(svn build)的错误:
error: no viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Run Code Online (Sandbox Code Playgroud)
我认为问题是using namespace std;将函数std::bind()从标题<functional>带到范围(尽管标题不包括在内).由于我使用的是使用整个命名空间std的第三方库,因此我无法轻易将类名更改为完全限定名.
我想知道这是否是库的实现中的问题,或者C++ 11中是否存在可能会破坏使用的旧代码的新规则bind().对此的任何想法将不胜感激.
谢谢
罗马
tem*_*def 32
这在库的实现中不是问题.C++ 11引入了自己的std::bind函数namespace std,用于将参数绑定到函数并支持一些高阶编程.
原因namespace std是有助于防止新的库函数和类在现有代码中造成重大更改.原因是所有内容都以名称开头std::,这可以防止名称冲突.
但是,如果你using namespace std;在你的程序中写入,那么你就会暴露自己可能会发生这样的重大变化,因为自由函数bind和函数std::bind不一定能够消除歧义.
为了解决这个问题,你可以调用bind如::bind明确指出,这是在全局命名空间,也可以删除using namespace std;该程序的顶部.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
3727 次 |
| 最近记录: |