#include <mutex>导致bind()函数调用在编译时引发错误,为什么?

时间:2018-12-10 22:18:47

标签: c++ mutex

我以前从未见过此问题,也不确定如何找到解决此问题的方法,因为我不确定该寻找什么。我有一些使用套接字读取/写入我的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));

这是怎么回事?

1 个答案:

答案 0 :(得分:3)

您可能有

using namespace std;

在代码中的某个位置which you shouldn't dobind()套接字函数与<functonal>中定义的std::bind()(以及<mutex>可能包含的内容)相混淆。

如果您绝对不能删除using namespace std;,则可以通过在其名称前加上bind()(即::)来消除在全局命名空间中选择::bind(...)函数的歧义。