2017-02-23 77 views
1

我不知道如何得到这个编译器错误的坐:二进制 '> =': '的std ::时辰:: SYSTEM_CLOCK :: time_point'

error C2676: binary '>=': 'std::chrono::system_clock::time_point' 
#include <ctime> 
#include <chrono> 

int main() 
{ 
    std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); 
    std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24)); 

    if (std::chrono::system_clock::now() >= now_c) 
    { 

    } 
} 

这里是什么编译器输出:

1>------ Build started: Project: test, Configuration: Debug x64 ------ 
1> Source.cpp 
1>d:\dev\cpptests\test\test\source.cpp(25): error C2784: 'bool std::operator >=(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)': could not deduce template argument for 'const std::pair<_Ty1,_Ty2> &' from 'std::chrono::system_clock::time_point' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\utility(311): note: see declaration of 'std::operator >=' 
1>d:\dev\cpptests\test\test\source.cpp(25): error C2784: 'bool std::chrono::operator >=(const std::chrono::duration<_Rep,_Period> &,const std::chrono::duration<_Rep2,_Period2> &)': could not deduce template argument for 'const std::chrono::duration<_Rep,_Period> &' from 'std::chrono::system_clock::time_point' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\chrono(538): note: see declaration of 'std::chrono::operator >=' 
1>d:\dev\cpptests\test\test\source.cpp(25): error C2784: 'bool std::chrono::operator >=(const std::chrono::time_point<_Clock,_Duration> &,const std::chrono::time_point<_Clock,_Duration2> &)': could not deduce template argument for 'const std::chrono::time_point<_Clock,_Duration2> &' from 'time_t' 
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\chrono(905): note: see declaration of 'std::chrono::operator >=' 
1>d:\dev\cpptests\test\test\source.cpp(25): error C2676: binary '>=': 'std::chrono::system_clock::time_point' does not define this operator or a conversion to a type acceptable to the predefined operator 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+1

嗯,你不能直接比较'time_t'(这是从旧的C土地)和'时辰:: SYSTEM_CLOCK :: time_point'。你为什么不制作'time_point'类型的'now_c'? – yeputons

回答

5

对于这种情况,我建议你使用类型自动扣除,因为它使代码更清晰。另外,如上述评论所述,std :: chrono设施不直接兼容c型time_t。我建议继续使用std :: chrono,因为它比对手更安全。

#include <ctime> 
#include <chrono> 
#include <iostream> 

int main() 
{ 
    auto now = std::chrono::system_clock::now(); 
    auto now_c = now - std::chrono::hours(24); 

    if (std::chrono::system_clock::now() >= now_c) 
    { 
    std::cout << "it works!" << std::endl; 
    } 
    return 0; 
} 
1

您尝试比较一个C++ time_point与C的时间!并没有运营商>=进行比较。然后您尝试将nanosecondsecond
time_point有一个名为time_since_epoch的函数,您可以使用它。
使用auto可以帮助解决问题,但不理解发生了什么,以及隐藏的内容!
所以你根本就比较(不好):
if (now.time_since_epoch().count() >= now_c)

而且更好代码:
std::chrono::duration_cast< std::chrono::seconds>(now.time_since_epoch()).count()

因为time_t是每second


if (now.time_since_epoch().count() >= now_c){ 
    std::cout << now.time_since_epoch().count() << '\n'; 
    std::cout << std::chrono::duration_cast< std::chrono::seconds>(now.time_since_epoch()).count() << '\n'; 
    std::cout << now_c << '\n'; 
    } 

输出:

1487879248873636085 
1487879248 
1487792848 
相关问题