• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP-NOW. Не компилируется static call beck функция в своем классе.

p-a-h-a

Member
Приветствую. Пишу класс с отправкой данных по ESP-NOW для ESP8266. Экземпляр класса должен узнать статус доставки ESP-NOW.
Вырезал все лишнее. Осталось то, что не компилируется никак.
Прошу помочь решить мою задачу. PS одновременная отправка разными экземплярами не планируется.
В коде пробую или обратную отдельную статическую функцию вызывать или лямбда функцию (не важно какой вариант заработает. Подстановка в лямбда функцию [this], [&], [variable] не компилируется).
Если раскомментировать любую строчку кода, компилятор выдает ошибку.
Код:
#include <espnow.h>

class device {
  public:
    device() {
      esp_now_register_send_cb(OnDataSent_cb); //ТАК ВЫГЛЯДЯТ ПРИМЕРЫ. Регистрируется калбэк функция

      esp_now_register_send_cb([](unsigned char *mac_addr, unsigned char sendStatus_) {//тут лямбда
        //device::sendStatus = sendStatus_; //'this' was not captured for this lambda function
        //sendStatus = sendStatus_;//'this' was not captured for this lambda function
        //this->sendStatus = sendStatus_;//'this' was not captured for this lambda function
        //device::staticSendStatus = sendStatus_; //collect2.exe: error: ld returned 1 exit status. Ошибка компиляции для платы Generic ESP8266 Module.
      });
    }

  private:
    uint8_t sendStatus;
    static uint8_t staticSendStatus;

    static void OnDataSent_cb(uint8_t *mac_addr, uint8_t sendStatus_) {
      //    device::staticSendStatus = sendStatus_;// collect2.exe: error: ld returned 1 exit status. Ошибка компиляции для платы Generic ESP8266 Module.
    }
};

void setup() {
  device MyDevice;
}
void loop() {}
 

p-a-h-a

Member
Тему можно удалять. Детская ошибка. Небыло скобочек при объявлении экземпляра класса.
C++:
#include <espnow.h>
class device {
  public:
    device() {
      esp_now_register_send_cb([&sendStatus](unsigned char *mac_addr, uint8_t sendStatus) {
        device::sendStatus = sendStatus;
      });
    }
  private:
    static  uint8_t sendStatus;
};
device MyDevice();
void setup() {}
void loop() {}
 
Сверху Снизу