使用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
相关产品推荐
相关产品推荐

