Boost asio Tutorial-例子Timer.5 make error

本文记录了在使用cygwin编译Boost1.41.0定时器示例时遇到的错误,并详细分析了解决方案。主要问题在于exception_ptr类未正确覆盖基类的虚析构函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Boost asio Tutorial

例子Timer.5 - Synchronising handlers in multithreaded programs编译错误

作者:smartvessel@gmail.com

环境:cygwin+boost1.41.0

 

报错信息:

make all

Building file: ../src/boosthello.cpp

Invoking: Cygwin C++ Compiler

g++ -D__USE_W32_SOCKETS -D_WIN32_WINNT -I"D:\cygwin\usr\local\include\boost" -O0 -g3 -c -fmessage-length=0 -MMD -MP -MF"src/boosthello.d" -MT"src/boosthello.d" -o"src/boosthello.o" "../src/boosthello.cpp"

In file included from /usr/local/include/boost/thread/future.hpp:12,

                 from /usr/local/include/boost/thread.hpp:24,

                 from ../src/boosthello.cpp:9:

/usr/local/include/boost/exception_ptr.hpp:43: error: looser throw specifier for `virtual boost::exception_ptr::~exception_ptr()'

/usr/local/include/boost/exception/detail/exception_ptr_base.hpp:28: error:   overriding `virtual boost::exception_detail::exception_ptr_base::~exception_ptr_base() throw ()'

make: *** [src/boosthello.o] Error 1

 

这是个make的报错,涉及exception_ptr.hppexception_ptr_base.hpp两个文件,于两个析构函数有关,而且析构函数是虚函数。

 

一番调查发现exception_ptr_base.hppclass exception_ptr_base定义了虚拟析构函数,而exception_ptr.hppclass exception_ptr继承之exception_ptr_base,但是没有实现其虚拟析构函数。

因此在exception_ptr中添加

        ~exception_ptr()throw()

        {

        }

这样就可以解决错误,这应该是1.41.0的一个bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值