编译器使用 cmake 对 boost.asio 的函数抛出错误

问题描述 投票:0回答:1

我刚刚学习 boost.asio 并决定尝试学习如何使用 cmake,但我的 IDE 对 async_wait 函数发誓

我的代码看起来像这样

#include <boost/asio.hpp>
#include <iostream>
#include <functional>

void print(boost::system::error_code& ec) {
    std::cout << "Hello\n";
}

int main() {
    boost::asio::io_context io;
    boost::asio::steady_timer t(io, boost::asio::chrono::seconds(1));

    t.async_wait(std::bind(print, boost::asio::placeholders::error));
}

但是编译器抛出这个错误

E0304 缺少“boost::asio”函数模板::basic_waitable_timer::async_wait 的实例 [with Clock=std::chrono::steady_clock, WaitTraits=boost::asio::wait_traitsstd::chrono::steady_clock, Executor =boost::asio::any_io_executor]”对应于参数列表

可能是因为我没有正确连接CMakeLists

cmake_minimum_required (VERSION 3.8)

 project ("BoostLer")

 set(BOOST_ROOT "C:\\boost")
 set(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib")
 set(BOOST_INCLUDEDIR "${BOOST_ROOT}/include")

 find_package(boost REQUIRED COMPONENTS system filesystem)
 add_subdirectory("BoostLer")

这是第一个 CMakeLists

add_executable (BoostLer "BoostLer.cpp" )

 if (CMAKE_VERSION VERSION_GREATER 3.12)
   set_property(TARGET BoostLer PROPERTY CXX_STANDARD 20)
 endif()

 include_directories(${Boost_INCLUDE_DIRS})
 target_link_libraries(BoostLer PUBLIC ${BOOST_LIBRARIES})

这是第二个 CMakeLists

c++ boost boost-asio asio
1个回答
0
投票

您正在将 asio 占位符与 std::bind 一起使用。我认为你需要使用

std::placeholders::_1
来代替。

当然,您可以首先使用 lambda 来避免绑定表达式。

此外,除非您

run
io_context
,否则您的程序不会产生任何效果。

© www.soinside.com 2019 - 2024. All rights reserved.