Behebung des „Fehlers: Variable „kann nicht implizit erfasst werden, da kein Standard-Erfassungsmodus angegeben wurde“
Bei der Arbeit mit Lambdas und der Erfassung Bei externen Variablen ist es wichtig, den Erfassungsmodus anzugeben. In diesem Fall beschwert sich der Compiler darüber, dass die Variable flagId im Lambda-Ausdruck verwendet wird, aber nicht erfasst wurde.
Um den externen Parameter flagId in den aufzunehmen Wenn Sie einen Lambda-Ausdruck verwenden, müssen Sie angeben, dass er erfasst werden soll.
Es stehen mehrere Erfassungsmodi zur Verfügung:
Für dieses spezielle Szenario: Wenn die ID des Geräts mit FlagId verglichen werden soll, können Sie FlagId nach Wert erfassen:
<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(), [flagId](Flag& device) { return device.getId() == flagId; });</code>
Alternativ können Sie FlagId, wenn Sie FlagId innerhalb des Lambda ändern müssen, nach Referenz erfassen:
<code class="cpp">auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(), [&flagId](Flag& device) { return device.getId() == flagId; });</code>
Durch die Angabe des Capture-Modus teilen Sie dem Compiler explizit mit, dass Sie beabsichtigen, die externe Variable innerhalb des Lambda zu verwenden. Dadurch wird der Kompilierungsfehler behoben und der Code kann sich wie vorgesehen verhalten.
Das obige ist der detaillierte Inhalt vonWie behebe ich „Fehler: Variable kann nicht implizit erfasst werden' in Lambda-Ausdrücken mit externen Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!