引用其他文件中的对象导致“...”未被捕获(节点 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 ;)
我在为节点 mcu 提供 c++ 引用时遇到问题。我用 Platform IO 编译(我也试过 Arduino 但有类似的问题) 我在 .h
中构建了我的 classclass 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 ;)