Почему я не могу использовать библиотеку chrono?

#c #multithreading #c 17 #chrono

#c #многопоточность #c 17 #c -chrono

Вопрос:

Здравствуйте, я выполняю простое упражнение с потоком, я хочу, чтобы мой 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::threadamp; t1) { t1.join();std::cout << 2<<std::endl; });
    std::thread t3([](std::threadamp; t2) { t2.join();std::cout << 3<<std::endl; });
    t3.join();
    return 0;
}
  

Ответ №1:

Из 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::threadamp; в качестве аргумента, вы, вероятно, имели в виду записать его в лямбда-выражении по ссылке как таковой:

     std::thread t1(printt1,1);
    std::thread t2([amp;t1]() { t1.join();std::cout << 2<<std::endl; });
    std::thread t3([amp;t2]() { t2.join();std::cout << 3<<std::endl; });
    t3.join();