Fehler: "'i' is not captured" in for-Anweisung

Hallo,
evtl. hat ja jemand einen Tipp für mich.
Mit nachfolgender Anweisung fülle ich problemlos einige Felder einer Webseite:

    server.on(isLightOff[1], []() {
      server.send(200, "application/json", "\"" + valOff[1] + "\"");
    });

    server.on(isLightOff[2], []() {
      server.send(200, "application/json", "\"" + valOff[2] + "\"");
    });

    server.on(isLightOff[3], []() {
      server.send(200, "application/json", "\"" + valOff[3] + "\"");
    });

Der Inhalt der Variablen:

String isLightOff[] = { "", "/kagedi0", "/stwand0", "/terrla0" };
String valOff[j] = String(zeitAUShour[j]) + ":" + String(zeitAUSmin[j]);

Letztere wird aus dem LittleFS geladen.

Jetzt möchte ich das per for-Anweisung zusammenfassen

  for (uint8_t i = 1; i < 4; i++)
  {
    server.on(isLightOff[i], []() {
      server.send(200, "application/json", "\"" + valOff[i] + "\"");
    });
  }

und da kommt folgende Fehlermeldung:

"'i' is not captured" bei "valOff[i]".

Ich konnte dazu noch keine für mich passende Lösung finden.
Würde mich über eine Lösung freuen.

for (uint8_t i = 1; i < 4; i++)
  {
    server.on(isLightOff[i], []() {
      server.send(200, "application/json", "\"" + String(zeitAUShour[i]) + ":" + String(zeitAUSmin[i]) + "\"");
    });
  }

Keine Ahnung was das für ein Server ist.

Das stimmt!
Das i ist ja auch nicht in der capture list.

Danke für die schnelle Antwort, wäre aber auch zu einfach gewesen :wink: und bringt den selben Fehler.

Danke, werde ich mir mal durchlesen.

for (uint8_t i = 1; i < 4; i++)
{
server.on(isLightOff[i], [=]() {
server.send(200, "application/json", "\"" + valOff[i] + "\"");
});
}

Danke dir, genau das "[=]" war es.
Hast du eine Erklärung dafür ?

In der Doku von combie bin ich noch nicht fündig geworden.

Bei Lamba-Funktionen []() {} muss man, ähnlich wie bei „normalen“ Funktionen dafür sorgen, dass die Variablen im Funktionskörper bekannt sind. Bei Lambda-Funktionen hat man die Möglichkeit das mit bestimmten Operatoren zu erreichen wie [=] oder [&]. So etwas wie[=i] müsste eigentlich auch funktionieren. Dann wird eine Kopie von i an die Lambda-Funktion weitergegeben. Bei nur einem = wird alles als Kopie an die Funktion weiter gegeben, was im Gültigkeitsbereich liegt, in dem die Funktion aufgerufen wird. Bei einem & wären es Referenzen.

Gibt noch einiges mehr zu Lambda Funktionen zu sagen, aber das würde hier den Rahmen sprengen.

Ok, danke.
Für weiteres werde ich dann selbst suchen.
Das ist schon mal ok.
Danke für die schnelle Hilfe.