크로노 라이브러리를 사용할 수없는 이유는 무엇입니까?

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;파일에 추가 하기 만하면 됩니다.


편집하다:

위의 문제에 관계없이 스레드 t2t3잘못 구성하고 있습니다. 를 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();