/*definition of start and end
std::chrono::time_point<std::chrono::system_clock> start;
std::chrono::time_point<std::chrono::system_clock> _end;
*/
std::chrono::time_point<std::chrono::system_clock> someclass::spf()
{
_end = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> time(_end-start);
start = std::chrono::system_clock::now();
return time;
}
unsigned int someclass::secs()
{
return std::chrono::duration_cast<std::chrono::seconds>(spf()).count();
}
编译器为duration_cast
的调用提供了错误。确切的错误:
error: no matching function for call to ‘duration_cast(std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000000l> > >)’
答案 0 :(得分:10)
时间点(std::chrono::time_point<...>
)不是持续时间(std::chrono::duration<...>
,例如std::chrono::seconds
,例如typedef)。
它们是不同的类型。
您正在尝试转换持续时间,但spf会返回time_point。持续时间是2个时间点之间的时间。 因此,要从time_point获取持续时间,您需要另一个time_point并获取这些time_points之间的持续时间。
所以这里你的错误是在spf中返回time_point而不是持续时间,这一行是错误的:
std::chrono::time_point<std::chrono::system_clock> time(_end-start);
你显然想要一个持续时间,但建立一个time_point。这样做:
const auto time_since_start = _end - start;
//...
return time_since_start; // you might need a duration cast here depending on what spf() will return.
所以spf()的返回类型必须是持续时间,如秒或毫秒或任何你想要的。