引用其他文件中的对象导致“...”未被捕获(节点 MCU)

Give Reference to an Object in an other file results in "..." is not captured (Node MCU)

我在为节点 mcu 提供 c++ 引用时遇到问题。我用 Platform IO 编译(我也试过 Arduino 但有类似的问题) 我在 .h

中构建了我的 class
class mess_server{
  private:
  public:
  int brerechnung_proz(Kalibrierung& kalibrierung, kali_dat& dat);
  void server_init(Kalibrierung& kalibrierung, kali_dat& dat);
};

在 .cpp 中我声明函数

void mess_server::server_init( Kalibrierung& kalibrierung, kali_dat& dat){
 ...
}

从 main.cpp 我这样称呼 Funktion:

...
Mess_server.server_init();
...

当我尝试编译它时,编译器给我这样的东西:

src/mess_server.cpp: In lambda function:
  src/mess_server.cpp:63:32: error: 'kalibrierung' is not captured
       dat = kalibrierung.laden();

我每次调用“kalibrierung”时都会遇到这些错误and/or“dat”

我做错了什么?我没主意了。

你可以在这里找到完整的代码:https://github.com/RubiRubsn/Bewaesserungs_Anlage/tree/main/Bewasserungs%20Anlage%20v2/src

抱歉,我自己漏掉了一点错误。

问题是您在这里使用的是 lambda 函数,除非您引用它,否则您的变量在 lambda 函数中是未知的。

server.on("/Kali_nass", HTTP_GET, [](AsyncWebServerRequest *request){
      dat = kalibrierung.laden(); // not captured inside the lambda
      ...
    });

Capture variable inside lambda

所以你可以这样做

server.on("/Kali_nass", HTTP_GET, [&kalibrierung](AsyncWebServerRequest *request){
      dat = kalibrierung.laden(); // captured inside the lambda
    });

或者您可以捕获 lambda 中的所有变量。但是我不确定是否可以覆盖你的 dat 变量 her.

server.on("/Kali_nass", HTTP_GET, [&](AsyncWebServerRequest *request){
      dat = kalibrierung.laden(); // captured inside the lambda
    });

有关 lambda 的更多信息,您可以查看 documentation

P.S.

对于 Whosebug 上的未来问题,重现错误所需的任何代码都应在问题中直接可见,而不是通过 GitHub ;)

How to create a Minimal, Reproducible Example