You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用boost::bind的_1/_2占位符时make编译失败求助

编译报错原因及解决方法

关于_1、_2未声明的错误

_1、_2是Boost Bind库提供的占位符,用于表示绑定函数时需要后续传入的参数。编译器报“未声明标识符”,是因为这些占位符属于boost::placeholders命名空间,代码中直接使用时编译器找不到对应的定义。

解决方法

有两种可行的修复方式:

  • 方法一:显式指定命名空间
    修改代码中的占位符,加上boost::placeholders::前缀,示例:
    pool.NotifyEntryRemoved.connect(boost::bind(&MemPoolConflictRemovalTracker::NotifyEntryRemoved, this, boost::placeholders::_1, boost::placeholders::_2));
    pool.NotifyEntryRemoved.disconnect(boost::bind(&MemPoolConflictRemovalTracker::NotifyEntryRemoved, this, boost::placeholders::_1, boost::placeholders::_2));
    
  • 方法二:引入placeholders命名空间
    在validation.cpp文件的头部(确保已经包含<boost/bind.hpp>之后)添加一行代码,直接引入整个占位符命名空间:
    using namespace boost::placeholders;
    
    之后代码中可以继续使用_1、_2这类简写形式。

关于Boost.Math的警告

那个警告只是提示从Boost 1.82版本开始,Boost.Math的最低语言标准要求将提升至C14,当前编译仍可正常进行。如果想要消除该警告,只需要在编译选项中指定C14或更高版本的标准(比如添加-std=c++14或-std=c++17参数)。

内容的提问来源于stack exchange,提问作者patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:04:54