Mengapa saya tidak dapat menggunakan perpustakaan chrono?

Aug 18 2020

Halo Saya melakukan beberapa latihan mudah dengan utas, saya ingin t1 saya tidur 2 detik tetapi saya mendapatkan kesalahan ini: tidak dapat menemukan operator literal numerik 'operator "" s'

Bagaimana mungkin?

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

Jawaban

8 chakaz Aug 18 2020 at 14:37

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

Operator ini dideklarasikan di namespace std::literals::chrono_literals, di mana keduanya literalsdan chrono_literalsmerupakan namespace sebaris. Akses ke operator tersebut dapat diperoleh dengan using namespace std::literals, using namespace std::chrono_literals, dan using namespace std::literals::chrono_literals.

Jadi, tambahkan saja using namespace std::literals::chrono_literals;ke file Anda dan Anda sudah siap.


Edit:

Terlepas dari masalah di atas, Anda sedang membuat utas t2dan t3salah. Alih-alih lambda yang menerima std::thread&sebuah argumen, Anda mungkin bermaksud untuk menangkapnya di lambda dengan referensi seperti:

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