• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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() {}
 
Сверху Снизу