Pourquoi ne puis-je pas utiliser la bibliothèque chrono?
Bonjour, je fais un exercice facile avec thread, je veux que mon t1 dorme 2 secondes mais j'obtiens cette erreur: impossible de trouver l'opérateur littéral numérique 'opérateur "" s'
Comment est-ce possible?
#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;
}
Réponses
De https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:
Ces opérateurs sont déclarés dans l'espace de noms
std::literals::chrono_literals
, où les deuxliterals
etchrono_literals
sont des espaces de noms en ligne. L' accès à ces opérateurs peut être acquiseusing namespace std::literals
,using namespace std::chrono_literals
etusing namespace std::literals::chrono_literals
.
Alors ajoutez simplement using namespace std::literals::chrono_literals;
à votre fichier et vous devriez être prêt à partir.
Éditer:
Indépendamment du problème ci-dessus, vous construisez les threads t2
et de t3
manière incorrecte. Au lieu d'un lambda qui accepte un std::thread&
comme argument, vous vouliez probablement le capturer dans le lambda par référence en tant que tel:
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();