0

ノード mcu の c++ での参照の引き渡しに問題があります。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

4

1 に答える 1

0

申し訳ありませんが、私は自分でエラーを少し見逃しました。

問題は、ここでラムダ関数を使用していて、変数を参照しない限り、変数がラムダ関数で認識されないことです。

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

ラムダ内のキャプチャ変数を参照してください

だから、あなたはこのようなことをすることができます

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

または、ラムダ内のすべての変数をキャプチャできます。しかし、dat 変数 her をオーバーライドしてもよいかどうかはわかりません。

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

ラムダの詳細については、ドキュメントをご覧ください。

PS

Stackoverflow に関する今後の質問では、エラーを再現するために必要なコードは、GitHub 経由ではなく、質問に直接表示する必要があります;)

最小限の再現可能な例を作成する方法

于 2021-02-08T09:46:21.450 に答える