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

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