Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan \"Ralat: pembolehubah tidak boleh ditangkap secara tersirat\" dalam Ungkapan Lambda dengan Pembolehubah Luaran?

Bagaimana untuk Menyelesaikan \"Ralat: pembolehubah tidak boleh ditangkap secara tersirat\" dalam Ungkapan Lambda dengan Pembolehubah Luaran?

Susan Sarandon
Susan Sarandonasal
2024-10-23 17:42:04125semak imbas

How to Resolve

Menyelesaikan "Ralat: pembolehubah "tidak boleh ditangkap secara tersirat kerana tiada mod tangkapan lalai telah ditentukan"

Apabila bekerja dengan lambdas dan menangkap pembolehubah luaran, adalah penting untuk menentukan mod tangkapan Dalam kes ini, pengkompil mengadu bahawa flagId pembolehubah sedang digunakan dalam ungkapan lambda tetapi belum ditangkap.

Untuk memasukkan flagId parameter luaran dalam ungkapan lambda, anda perlu menentukan bahawa ia harus ditangkap Ini dilakukan menggunakan kurungan segi empat sama [].

Terdapat beberapa mod tangkapan tersedia:

  • Tangkap mengikut nilai. : Menangkap pembolehubah mengikut nilainya, mencipta salinan di dalam lambda.
  • Tangkap melalui rujukan: Menangkap pembolehubah melalui rujukan, membenarkan lambda mengubah suai pembolehubah asal.
  • Tangkap dengan rujukan const: Menangkap pembolehubah melalui rujukan const, membenarkan lambda membaca pembolehubah asal tetapi tidak mengubah suainya.

Untuk senario khusus ini, di mana niatnya adalah untuk membandingkan ID peranti dengan flagId, anda boleh menangkap flagId mengikut nilai:

<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
        [flagId](Flag& device)
    { return device.getId() == flagId; });</code>

Sebagai alternatif, jika anda perlu mengubah suai flagId dalam lambda, anda boleh menangkapnya melalui rujukan:

<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(),
        [&flagId](Flag& device)
    { return device.getId() == flagId; });</code>

Dengan menyatakan mod tangkapan, anda secara jelas memberitahu pengkompil bahawa anda berhasrat untuk menggunakan pembolehubah luaran di dalam lambda. Ini menyelesaikan ralat kompilasi dan membenarkan kod berfungsi seperti yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan \"Ralat: pembolehubah tidak boleh ditangkap secara tersirat\" dalam Ungkapan Lambda dengan Pembolehubah Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn