¿Por qué no puedo usar la biblioteca de crono?

Aug 18 2020

Hola, estoy haciendo un ejercicio fácil con hilo, quiero que mi t1 duerma 2 segundos pero recibo este error: no puedo encontrar el operador literal numérico 'operador "" s'

¿Cómo es eso posible?

#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;
}

Respuestas

8 chakaz Aug 18 2020 at 14:37

Desde https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:

Estos operadores se declaran en el espacio de nombres std::literals::chrono_literals, donde literalsy chrono_literalsson espacios de nombres en línea. El acceso a estos operadores se puede ganar con using namespace std::literals, using namespace std::chrono_literalsy using namespace std::literals::chrono_literals.

Así que solo agregue using namespace std::literals::chrono_literals;a su archivo y debería estar listo para comenzar.


Editar:

Independientemente de la cuestión anterior, usted está construyendo los hilos t2y t3de forma incorrecta. En lugar de una lambda que acepta a std::thread&como argumento, probablemente quisiste capturarla en la lambda por referencia como tal:

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