最近使用c++11 的标准thread库,发现传参的时候的bug,很隐密。

...
/usr/include/c++/4.8.2/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<void (*(std::unordered_map<int, int>, int, int))(std::unordered_map<int, int>&, int, int)>’typedef typename result_of<_Callable(_Args...)>::type result_type;
...

这个错误确实很神秘,但问题是thread_add它通过引用获取它的第一个参数,但是你按值传递它。这会导致仿函数类型推断错误。如果你想通过引用传递一些实际的函数std::bind或者像a 的main函数那样std::thread,你需要使用一个引用包装器(std::ref):

所以当你传的参数是引用的时候,GCC不会使用这个奇怪的消息进行编译。你可以通过使用带线程的引用包装器来摆脱它

t[0] = thread(thread_add, std::ref(ht), 0, 9);
t[1] = thread(thread_add, std::ref(ht), 10, 19);

这将成功编译。并且线程使用的每个引用都将引用相同的对象。

这是一种传参时是引用的报错,这时候用std::ref()装饰一下就可以了。

还有一种是类的this指针问题。具体的话参照我找到的问题文章看下:

https://segmentfault.com/q/1010000004413576

http://stackoverflow.com/questions/28950835/c-error-no-type-named-type-in-class-stdresult-ofvoid-stdunordered

c++ thread 带参数编译错误:/usr/include/c++/4.8/functional:1697:61: error: no type named ‘type’ in ‘class st相关推荐

  1. Caffe编译踩坑(一):/usr/include/boost/system/error_code.hpp:233:21: error: looser throw specifier

    近期在尝试跑LiteFlowNet,需要编译caffe,因为服务器上已经安装了CUDA11.3,其采用的环境是CUDA8.0+Cudnn5.1,因此安装了CUDA8.0的相关文件,并安装了gcc-4. ...

  2. Qt常见make编译错误:/usr/bin/ld:cannot find -lxxx

    使用make命令编译Qt原码时出现了 /usr/bin/ld: cannot find -lXrender 问题: /usr/bin/ld: cannot find -lXrender         ...

  3. 编译错误/usr/bin/ld: cannot find -lz

    转自:http://blog.sina.com.cn/s/blog_4be5711f01015th7.html 编译的时候出现"/usr/bin/ld: cannot find -lz&qu ...

  4. /usr/include/c++/6/cstdlib:75:25: fatal error: stdlib.h: No such file or directory

    1.错误原因 报错如上.后来经过查阅,发现这个错误是因为由于gcc6的缘故.我的gcc 版本是6.5的.gcc6已经把吧stdlib.h纳入了libstdc++以进行更好的优化,C Library的头 ...

  5. c++错误functional:1526:9: error: no type named ‘type’ in ‘class std::result_of

    关于这个错误,我自己的情况是thread函数形参有&引用传值,例如: void thread_test(vector<int> &test_vec),编译就会报错,去掉&a ...

  6. 在linux下面使用Jsoncpp,在编译时添加了头文件搜索路径-Ixxxx/json ,导致很多错误,如下: In file included from /usr/include/x86_64-li

    在linux下面使用Jsoncpp,在编译时添加了头文件搜索路径-Ixxxx/json ,导致很多错误,如下: In file included from /usr/include/x86_64-li ...

  7. 【C++】c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)

    [C++]c++编译错误-- C2678 二进制"=": 没有找到接受"_Ty"类型的左操作数的运算符(或没有可接受的转换) 代码: //by 鸟哥 rever ...

  8. c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)

    代码: //by 鸟哥 reverse引起的编译错误 //有疑问请留言或加群 1032082534 #include<iostream> #include<algorithm> ...

  9. VS2013 编译错误类型: 必须定义入口点

    VS2013 编译错误类型: 必须定义入口点 LINK : fatal error LNK1561: 必须定义入口点 在进行vs2013编译的时候遇到报错1561:必须定义入口点,错误原因大致有以下原 ...

最新文章

  1. 这玩意比ThreadLocal叼多了,吓得我赶紧分享出来。
  2. LruCache缓存处理及异步加载图片类的封装
  3. mybatis添加记录时返回主键id
  4. mosquitto 使用时出现的一些问题及其解决办法
  5. 应云而生,幽灵的威胁 - 云原生应用交付与运维
  6. 三款运用二维码分享与预览的原型设计工具
  7. npm 安装less插件_IDEA编译less插件LESS CSS Compiler的安装
  8. junit 测试 dao_JUnit测试Spring Service和DAO(带有内存数据库)
  9. GroupID和ArtifactID
  10. 更强大的技术团队和更雄厚的预算,海外高频巨头抢占中国市场,不少本土团队淘汰出局
  11. 智哪儿头条  萤石网络冲刺科创板  深圳购买全屋智能有补贴
  12. 【Axure原型分享】移动端可视化案例模板
  13. 域名解析成ip的过程
  14. vue的keep-alive属性
  15. 汇编 movl %gs:20, %eax 的作用
  16. 贴吧猫头鹰隐藏二维码是怎么制作的?
  17. mac 命令行小技巧--mas 替代appstore
  18. pulsar分析以及各消息队列对比
  19. 键盘只能按一次解决方案
  20. MS5611气压计原理图设计

热门文章

  1. 计算机网络(二十三):路由器工作原理
  2. 【论文视频】Clip:Learning Transferable Visual Models From Natural Language Supervision【多模态,对比学习,迁移学习】
  3. FPGA设计篇之并行全排序
  4. 竞价推广利用二八定律分析
  5. Z690主板无法识别硬盘解决办法(核显状态下设置CSM兼容模式无效,无法打开CSM开关)
  6. 数据科学与大数据技术怎么样?
  7. Day03 每日英语 (辨析)
  8. 为什么要写测试用例,测试用例写给谁看?
  9. vue3流程图组件vue flow使用
  10. 激励合作伙伴的8个想法