令人惊讶的是,在几乎没有修改之后,我设法在我的Linux机器上安装了libc++ (因为libstdc++遗漏了一些东西)。不幸的是,我现有的一些代码现在已经坏了,因为有同名的函数。
通常,以我需要的方式,bind()与套接字相关。但是,libc++提供了自己的绑定()函数,该函数基本上是this,但没有方便的名称空间来分隔它们。根据墨菲定律,编译器试图使用错误的函数,并输出一个错误。NetBeans没有发现任何问题,因为它实际上正在查看sys/socket.h文件,这是它应该做的。
所以,由于这两个函数基本上都超出了我的控制范围,我如何告诉编译器(clang++)它应该在特定的头中查找,而不是在其他地方查找该函数?
发布于 2012-01-24 08:45:23
首先,这与墨菲没有任何关系,我认为:bind()模板的选择可能是更好的匹配。但是,std::bind()的声明在名称空间std中,至少在我正在查看的头文件版本中是这样。您的源文件是否可能包含using指令?(在这种情况下,你应该得到你所要求的所有痛苦)
如果没有using指令,如果参数与完全匹配,则非模板版本应该是更好的匹配。如果这仍然不起作用,您可以从<sys/socket.h>为bind()函数创建一个转发函数,假设avoid_conflict_bind()是在转换单元中定义的唯一函数,即它将只包括<sys/socket.h>而不包括<functional>。这样,这个函数转发到的bind()函数就没有选择了,您就可以使用avoid_conflict_bind()了。
发布于 2013-02-12 22:27:39
我在<WinSock2.h>的bind()和std::bind()之间发生了冲突(我使用的是using namespace std;)
我只是在方法调用之前添加了::,它起作用了!bind() => ::bind()
https://stackoverflow.com/questions/8980384
复制相似问题