为什么我不能使用 chrono 库?

new*_*ent 1 c++ multithreading c++-chrono c++17

你好,我正在用线程做一些简单的练习,我希望我的 t1 休眠 2 秒,但我收到此错误:无法找到数字文字运算符 'operator""s'

这怎么可能?

#include <iostream>
#include <chrono>
#include <thread>

void printt1(int i)
{   std::this_thread::sleep_for(2s);
    std::cout << i<<std::endl;
}
int main()
{
    std::thread t1(printt1,1);
    std::thread t2([](std::thread& t1) { t1.join();std::cout << 2<<std::endl; });
    std::thread t3([](std::thread& t2) { t2.join();std::cout << 3<<std::endl; });
    t3.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

cha*_*kaz 8

https://en.cppreference.com/w/cpp/symbol_index/chrono_literals

这些运算符在 namespace 中声明std::literals::chrono_literals,其中literalschrono_literals都是内联命名空间。访问这些运营商可以与获得using namespace std::literalsusing namespace std::chrono_literalsusing namespace std::literals::chrono_literals

所以只需添加using namespace std::literals::chrono_literals;到您的文件中,您就可以开始使用了。


编辑:

不管上述问题,你就构造螺纹t2t3不正确。std::thread&您可能打算通过引用在 lambda 中捕获它,而不是接受 a作为参数的 lambda:

    std::thread t1(printt1,1);
    std::thread t2([&t1]() { t1.join();std::cout << 2<<std::endl; });
    std::thread t3([&t2]() { t2.join();std::cout << 3<<std::endl; });
    t3.join();
Run Code Online (Sandbox Code Playgroud)