크로노 라이브러리를 사용할 수없는 이유는 무엇입니까?
Aug 18 2020
안녕하세요 저는 스레드로 간단한 운동을하고 있습니다. 제 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;
}
답변
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&
인수로 받아들이는 람다 대신에 다음 과 같이 참조로 람다에 캡처하려고 할 수 있습니다.
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();