我以前从未见过这个问题,也不确定如何寻找解决此问题的方法,因为我什至不确定要寻找什么。我有一些代码使用套接字来读/写我的 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:错误:“std::bind(_Functor&&,_ArgTypes&& ...) 中的“operator<”不匹配[with _Functor = int&, _ArgTypes = {sockaddr*, unsigned int}, typename 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));
这是怎么回事?
你可能有
using namespace std;
在您的代码中的某处,您不应该这样做。该bind()
带插座的功能正在被混淆std::bind()
,其在定义<functonal>
(并且其<mutex>
可能包括)。
如果你绝对不能删除using namespace std;
,那么你可以消除歧义选择bind()
用前缀它在全局命名空间功能::
,即::bind(...)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句