我刚刚学习 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
您正在将 asio 占位符与 std::bind 一起使用。我认为你需要使用
std::placeholders::_1
来代替。
当然,您可以首先使用 lambda 来避免绑定表达式。
此外,除非您
run
io_context
,否则您的程序不会产生任何效果。