binary'> =':'std :: chrono :: system_clock :: time_point'

Dam*_*ian 1 c++ c++11 c++-chrono visual-studio-2015

我不知道如何驾驭这个编译错误:

error C2676: binary '>=': 'std::chrono::system_clock::time_point'
Run Code Online (Sandbox Code Playgroud)
#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)
  {

  }
}
Run Code Online (Sandbox Code Playgroud)

以下是编译器输出的内容:

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 ==========
Run Code Online (Sandbox Code Playgroud)

Lem*_*mko 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;
}
Run Code Online (Sandbox Code Playgroud)