簡體   English   中英

為什么我不能使用 chrono 庫?

[英]Why can't I use chrono library?

您好,我正在用線程做一些簡單的練習,我希望我的 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;
}

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

這些運算符在命名空間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; 到你的文件,你應該對 go 很好。


編輯:

無論上述問題如何,您都錯誤地構造了線程t2t3 而不是接受std::thread&作為參數的 lambda ,您可能打算通過引用在 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM