我以前从未见过此问题,也不确定如何找到解决此问题的方法,因为我不确定该寻找什么。我有一些使用套接字读取/写入我的linux设备驱动程序的代码。此代码已经过测试,可以照常工作。
出于线程安全的原因,我想在程序中添加互斥锁,但是一旦我将#include <mutex>
添加到程序的main.cpp文件中,并且仅在那行<sys/socket.h> bind()
处抛出错误,编译时间...
一旦我#include <mutex>
并且在我的代码中没有进行任何更改,这是导致问题的行
if (bind(sock_fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
dp_comm.cpp:在函数'int setup_socket_to_dev(const char *,int *)'中: dp_comm.cpp:160:64:错误:在'operator <'中不匹配 'std :: bind(_Functor &&,_ArgTypes && ...)[with _Functor = int&, _ArgTypes = {sockaddr *,无符号整数},类型名std :: _ Bind_helper <_Functor,_ArgTypes> :: type = std :: _ Bind]((*&((sockaddr *)(&saddr))), (*&20u))<0'
我还尝试创建一个int并将其等于bind()
的返回值
int ret_bind = bind(sock_fd, (struct sockaddr *)&saddr, sizeof(saddr));
dp_comm.cpp:在函数'int setup_socket_to_dev(const char *,int *)'中: dp_comm.cpp:160:71:错误:初始化时无法将'std :: _ Bind_helper :: type {aka std :: _ Bind}'转换为'int'
为什么#include <mutex>
会导致我的编译器在bind()
调用时抛出错误?
以下是我#include <mutex>
时唯一的代码编译方式
bind(sock_fd, (struct sockaddr *)&saddr, sizeof(saddr));
这是怎么回事?
答案 0 :(得分:3)
您可能有
using namespace std;
在代码中的某个位置which you shouldn't do。 bind()
套接字函数与<functonal>
中定义的std::bind()
(以及<mutex>
可能包含的内容)相混淆。
如果您绝对不能删除using namespace std;
,则可以通过在其名称前加上bind()
(即::
)来消除在全局命名空间中选择::bind(...)
函数的歧义。