在出乎意料地没什么黑客攻击之后,我设法在我的Linux机器上安装了libc ++(因为libstdc ++缺少了东西)。不幸的是,由于具有相同名称的功能,我现有的一些代码现已破裂。
通常,以我需要的方式,bind()与套接字相关。但是,libc ++带有自己的bind()函数,它基本上是this但没有方便的命名空间来分隔它们。根据墨菲定律,编译器尝试使用错误的函数,并吐出错误。 NetBeans没有看到任何问题,因为它实际上是在查看sys / socket.h文件,因为它应该是。
所以,这两个函数基本上都超出了我的控制范围,我怎么告诉编译器(clang ++)它应该在特定的头文件中查找而在该函数的其他地方呢?
答案 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()
。