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:
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!