¿Por qué no puedo usar la biblioteca de crono?
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
Desde https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:
Estos operadores se declaran en el espacio de nombres
std::literals::chrono_literals
, dondeliterals
ychrono_literals
son espacios de nombres en línea. El acceso a estos operadores se puede ganar conusing namespace std::literals
,using namespace std::chrono_literals
yusing 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 t2
y t3
de 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();