我在boost庫1.71.0中發現了下面的類定義,在我的案例中,該庫安裝在/usr/include/boost。
class BOOST_SYMBOL_VISIBLE seconds : public time_duration
{
public:
template <typename T>
explicit seconds(T const& s,
typename boost::enable_if<boost::is_integral<T>, void> :type* = BOOST_DATE_TIME_NULLPTR) :
time_duration(0,0, numeric_cast<sec_type>(s))
{}
};
以上類的定義可以在/usr/include/boost/date_time/posix_time/posix_time_duration.hpp
我正在使用下面的代碼片段,其中boost::posix_time::seconds被實體化了:
#include <boost/asio.hpp>
#include <boost/array.hpp>/span>
#include <boost/format.hpp>/span>
#include <boost/bind.hpp>/span>
#include <boost/serialization/access.hpp>/span>
#include <boost/archive/binary_iarchive.hpp>/span>
#include <boost/shared_array.hpp>/span>
#include <boost/algorithm/string.hpp>
#include <Chrono>
#include <vector>
#include <boost/date_time/posix_time/posix_time_duration.hpp>
int main()
{
boost::ASIO::io_service io_service。
boost::asio::ip::tcp::socket socket(io_service)。
boost::asio::deadline_timer timer(io_service)。
timer.expires_from_now(boost::posix_time::seconds(60.0)
return 0。
}
假設我保存上述代碼片段,檔案名為boost.cpp。然后我用命令編譯boost.cpp
g -I /usr/include/boost -pthread boost.cpp
但是,我得到了以下的錯誤:
boost.cpp: 在函式'int main()'。
boost. cpp:19:59: error: no matching function for call to 'boost: :posix_time::seconds::seconds(double)'
19 | timer.expires_from_now(boost::posix_time::seconds(60.0)
| ^
在從/usr/include/boost/date_time/posix_time/posix_time_types.hpp包含的檔案中:16。
來自/usr/include/boost/asio/time_traits.hpp:23。
從/usr/include/boost/asio/detail/timer_queue_ptime.hpp:22。
從/usr/include/boost/asio/detail/deadline_timer_service.hpp:29。
從 /usr/include/boost/asio/basic_deadline_timer.hpp:24,
來自/usr/include/boost/asio.hpp:25。
從boost.cpp:1。
/usr/include/boost/date_time/posix_time/posix_time_duration。 hpp:57:16: note: candidate: 'template<class T> boost::posix_time::seconds:: seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>:type*) '
57 | explicit seconds(T const& s。
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:16: note: 模板引數推導/替換失敗。
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp。在替換'template<class T> boost::posix_time::seconds::seconds(const T& , typename boost: :enable_if<boost::is_integral<T>, void>:type*) [with T = double]'。
boost.cpp:19:59: 需要從這里開始。
/usr/include/boost/date_time/posix_time/posix_time_duration。 hpp:57:16: error: no type named 'type' in 'struct boost: :enable_if<boost::is_integral<double> , void>'
/usr/include/boost/date_time/posix_time/posix_time_duration。 hpp:53:30: note: candidate: 'boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration。 hpp:53:30: 注意。 沒有已知的轉換for argument 1從'double'到'const boost::posix_time::seconds&'
/usr/include/boost/date_time/posix_time/posix_time_duration。 hpp:53:30: note: candidate: 'boost::posix_time::seconds::seconds(boost::posix_time::seconds&& ) '
/usr/include/boost/date_time/posix_time/posix_time_duration。 hpp:53:30: 注意。 沒有已知的轉換 for argument 1 從'double'到'boost::posix_time::seconds&&'
我能想到的是boost::posix_time::seconds(60.0)這一行的使用是不正確的,但我無法弄清楚根據上述定義實體化posix_time::seconds類的正確方法是什么。你們有人對此有什么想法嗎?
uj5u.com熱心網友回復:
那個建構式需要一個積分(整數)。 boost::posix_time::seconds(60)應該可以。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314116.html
標籤:
