libc ++ - bind()的命名冲突?

时间:2012-01-24 00:02:45

标签: c++ clang libc++

在出乎意料地没什么黑客攻击之后,我设法在我的Linux机器上安装了libc ++(因为libstdc ++缺少了东西)。不幸的是,由于具有相同名称的功能,我现有的一些代码现已破裂。

通常,以我需要的方式,bind()与套接字相关。但是,libc ++带有自己的bind()函数,它基本上是this但没有方便的命名空间来分隔它们。根据墨菲定律,编译器尝试使用错误的函数,并吐出错误。 NetBeans没有看到任何问题,因为它实际上是在查看sys / socket.h文件,因为它应该是。

所以,这两个函数基本上都超出了我的控制范围,我怎么告诉编译器(clang ++)它应该在特定的头文件中查找而在该函数的其他地方呢?

2 个答案:

答案 0 :(得分:8)

我在bind()<WinSock2.h> std::bind()之间发生了冲突(我正在使用using namespace std;)我刚刚在方法之前添加了::打电话,它的工作! bind() =&gt; ::bind()

答案 1 :(得分:4)

首先,这与Murphy没有任何关系,我认为:bind()模板的选择可能只是更好的匹配。 std::bind()的声明在命名空间std中,但是,至少在我正在查看的头文件的版本中。您的源文件是否可能包含using指令? (在这种情况下,你应该得到你所要求的所有痛苦)

如果没有using指令,如果参数匹配完全,则非模板版本应该是更好的匹配。如果这仍然无效,您可以从bind()创建<sys/socket.h>函数的转发函数,假设avoid_conflict_bind()这是翻译单元中定义的唯一函数,即它将仅包含<sys/socket.h>而非<functional>。这样,此函数无法转发bind()函数,您可以使用avoid_conflict_bind()