クロノライブラリを使用できないのはなぜですか?

Aug 18 2020

こんにちは私はスレッドで簡単なエクササイズをしています。t1を2秒間スリープさせたいのですが、次のエラーが発生します:数値リテラル演算子 '演算子 "" 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;
}

回答

8 chakaz Aug 18 2020 at 14:37

から 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;、ファイルに追加するだけで、準備が整います。


編集:

上記の問題に関係なく、スレッドt2を作成しt3ているのは間違っています。std::thread&引数としてaを受け入れるラムダの代わりに、参照によってラムダにキャプチャすることを意図している可能性があります。

    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();