首页 > 解决方案 > 无效的重载 boost::asio::io_service::run

问题描述

我一直面临在 Linux 中使用boost::asio::io_service::run的问题,与此非常相似:在 linux 下使用 boost::thread 创建一个 boost::asio 工作线程

我看到这个问题的答案是“错误是 boost::asio::io_service::run 过载,在这种情况下你必须解决歧义。”

有人可以告诉我如何解决这种歧义吗?谢谢。

我在 RHEL 7.7 中,使用 Eclipse IDE 进行编码。我的代码段是:

std::vector<boost::thread> threadPool;
boost::assio::io_service IOService;
.
.
threadPool.pushback(boost::thread(boost::bind(&boost::asio::io_service::run, &IOService)));

我收到错误“'boost::asio::io_service::run' 的重载无效”

我看到boost::asio::io_service::run有两个重载:

std::​size_t boost::asio::io_service::run()
std::​size_t boost::asio::io_service::run(boost::system::error_code &ec)

我不知道如何解决歧义,因为它们具有相同的回报。如果我尝试添加这样的变量:

threadPool.pushback(boost::thread(boost::bind(&boost::asio::io_service::run(), &IOService)));

我收到错误消息:“无效的参数 'Candidates are unsigned long int run()'”,我不知道该怎么做。

有人可以教我这样一个困惑的白痴我该怎么办吗?是环境问题、链接问题还是声明问题?

编辑 1:使用 lambdas 会产生错误

'Address of overloaded function with no contextual type information'

这没有任何意义,我认为只是重申了函数的歧义。

此错误不会显示在详细说明 Make 结果的控制台窗口中,仅显示在错误窗口中。这让我觉得它纯粹是一个 IDE 语法检查类型错误?GCC 版本是 4.8.5。

标签: boostoverloading

解决方案


推荐阅读