4

经过令人惊讶的少量黑客攻击后,我设法在我的 Linux 机器上安装了 libc++(因为 libstdc++ 缺少一些东西)。不幸的是,由于具有相同名称的函数,我现有的一些代码现在已经损坏。

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

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

4

2 回答 2

9

我在方法调用之前 添加的bind()from<WinSock2.h>std::bind()(我正在使用using namespace std;)之间存在冲突,它起作用了!=>
::bind()::bind()

于 2013-02-12T14:27:38.620 回答
4

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

如果没有 using 指令,如果参数完全匹配,则非模板版本应该是更好的匹配。如果这仍然没有帮助,您可以为bind()from函数创建一个转发函数<sys/socket.h>,假设avoid_conflict_bind()这是翻译单元中定义的唯一函数,即它只会包含<sys/socket.h>而不是<functional>。这样,bind()这个函数转发到的函数没有选择,然后你可以使用avoid_conflict_bind().

于 2012-01-24T00:45:22.620 回答