代码之家  ›  专栏  ›  技术社区  ›  theebugger

错误:未声明“high_resolution_clock”

  •  0
  • theebugger  · 技术社区  · 5 年前

    我在windows 10上使用g++8.1.0版本,但当我尝试编译时

    auto start=high_resolution_clock::now();
    rd(n);
    auto stop=high_resolution_clock::now();
    auto duration = duration_cast<microseconds>(stop-start);
    cout<<duration.count()<<endl;
    

    我得到的错误是

    error: 'high_resolution_clock' has not been declared
     auto start=high_resolution_clock::now();
                ^~~~~~~~~~~~~~~~~~~~~
    

    我把chrono和time都包括在内了。h

    2 回复  |  直到 5 年前
        1
  •  2
  •   Remy Lebeau    5 年前

    您需要指定 std::chrono:: 前面的名称空间限定符 high_resolution_clock , microseconds ,以及 duration_cast 例如:

    #include <chrono>
    
    auto start = std::chrono::high_resolution_clock::now();
    rd(n);
    auto stop = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop-start);
    std::cout << duration.count() << std::endl;
    

    否则,您可以使用 using 取而代之的是陈述,例如:

    #include <chrono>
    using namespace std::chrono;
    
    auto start = high_resolution_clock::now();
    rd(n);
    auto stop = high_resolution_clock::now();
    auto duration = duration_cast<microseconds>(stop-start);
    std::cout << duration.count() << std::endl;
    

    或者:

    #include <chrono>
    using std::chrono::high_resolution_clock;
    using std::chrono::microseconds;
    using std::chrono::duration_cast;
    
    auto start = high_resolution_clock::now();
    rd(n);
    auto stop = high_resolution_clock::now();
    auto duration = duration_cast<microseconds>(stop-start);
    std::cout << duration.count() << std::endl;
    
        2
  •  0
  •   theebugger    5 年前

    哦,我刚找到解决办法, 我忘了使用chrono命名空间 所以代码应该是:

    auto start=chrono::high_resolution_clock::now();
    rd(n);
    auto stop=chrono::high_resolution_clock::now();
    auto duration = chrono::duration_cast<chrono::microseconds>(stop-start);
    cout<<duration.count()<<endl;