Heim >Backend-Entwicklung >C++ >Wie behebe ich „Fehler: Variable kann nicht implizit erfasst werden' in Lambda-Ausdrücken mit externen Variablen?

Wie behebe ich „Fehler: Variable kann nicht implizit erfasst werden' in Lambda-Ausdrücken mit externen Variablen?

Susan Sarandon
Susan SarandonOriginal
2024-10-23 17:42:04236Durchsuche

How to Resolve

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:

  • Erfassung nach Wert : Erfasst die Variable anhand ihres Werts und erstellt eine Kopie innerhalb des Lambda.
  • Erfassung durch Referenz: Erfasst die Variable durch Referenz, sodass das Lambda die ursprüngliche Variable ändern kann.
  • Erfassung durch Konstantenreferenz:Erfasst die Variable durch Konstantenreferenz, sodass das Lambda die ursprüngliche Variable lesen, aber nicht ändern kann.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn