首页 > 解决方案 > 引用其他文件中的对象导致“...”未被捕获(节点 MCU)

问题描述

我在 C++ 中为节点 mcu 提供引用时遇到问题。我使用 Platform IO 进行编译(我也尝试过 Arduino,但遇到了类似的问题)我在 .h 中构建了我的类

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”和/或“dat”时都会出现这些错误

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

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

标签: c++referencenodemcuplatformio

解决方案


对不起,我自己错过了一点错误。

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

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

请参阅在 lambda 中捕获变量

所以你可以做这样的事情

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

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

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

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

附言

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

如何创建一个最小的、可重现的示例


推荐阅读