クロノライブラリを使用できないのはなぜですか?
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
で宣言されます。ここで、literals
とchrono_literals
は両方ともインライン名前空間です。これらの演算子へのアクセスはして得ることができるusing namespace std::literals
、using namespace std::chrono_literals
とusing 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();