2017-06-22 27 views
1

当我低于此timer.hpp头文件进行编译时找不到符合“运营商=”, 编译器说 错误:不对应的“操作符=”(操作数类型是'std :: chrono :: _ V2 :: system_clock :: time_point {aka std :: chrono :: time_point >>}'和'std :: __ success_type>> :: type {aka std :: chrono :: duration>} ') end = std :: chrono :: high_resolution_clock :: now() - start;使用std ::时辰:: high_resolution_clock

我猜测开始和结束的变量类型是错误的。 什么是正确的类型? 我想使用std :: chrono :: high_resolution_clock。

#include <chrono> 

namespace timer{ 
static std::chrono::system_clock::time_point start, end; 

void initTime(){ 
    start = std::chrono::high_resolution_clock::now(); 
} 


void endTime(){ 
    end = std::chrono::high_resolution_clock::now() - start; 
} 

} 

timer.hpp应该包含一些重要的文件中使用。通过在函数之后调用timer :: initTime()函数之前调用timer :: endTime()函数之前,我会得到计时结果(持续时间的getter在这里省略)。

+0

以下是'chrono'视频教程:https://www.youtube.com/watch?v=P32hvk8b13M它解决了这些问题。 –

回答

2

有两个问题与此代码:

static std::chrono::system_clock::time_point start, end; 
/* ... */ 

void endTime(){ 
    end = std::chrono::high_resolution_clock::now() - start; 
} 

您声明end作为一个时间点,但随后在赋值运算符的右侧,你减去两个时间点(now()start ),并分配给end

逻辑上,如果你减去两个time points,则不会获得新的时间点。例如,如果我想减去“今天08:15:00” - “今天08:05:00”,将结果描述为“今天00:10:00”是没有意义的。相反,C++ chrono库有duration class template;它意在表示时间长度(例如两个时间点之间的差异)。

operator -超载4号位置: http://en.cppreference.com/w/cpp/chrono/time_point/operator_arith2

我建议观看视频教程是@Howard Hinnant(欣南特)连接到上面...... Hinnant(欣南特)先生是boost::chrono库的主要作者,其曾担任C++标准库中的chrono组件的基础。

潜在问题是start具有类型std::chrono::system_clock::time_point,这可能比通过std::chrono::high_resolution_clock::now()返回的类型不同的类型(不同的时钟)(其具有类型std::chrono::high_resolution_clock::time_point)。

+0

Nitpick:我是'std :: chrono'库中的第一作者(还有其他贡献者),它是'boost :: chrono'库的基础。 :-) –

+0

我已经相应地改变了表征。 – NicholasM

+0

谢谢。我的一点是,在这种情况下,“std”首先出现,然后是“boost”。那么,至少“std”草案是第一个。 boost lib可能是在2011年标准版发布之前发布的。这对于您的良好答案(我已经提出)并不重要。这些只是历史花絮。 –

相关问题