2 экземпляра ESP8266Ping

Я использую ESP8266Ping lib внутри моей iot lib, которая поддерживает подключение Wi-Fi и сообщения MQTT. Поскольку он создает свой собственный экземпляр с именем Ping при вызове #include <ESP8266Ping.h><ESP8266Ping.h>- это должно было быть место в iot.cpp.

Я пишу другую библиотеку, IPMonitor, который проверяет клиентов в сети (используя pings), я хотел снова использовать ESP8266Ping.

Мой файл скетча, создайте экземпляр iot и IPMonitor для проверки/ регистрации ошибок на отслеживаемых клиентах.

Но я получаю ошибку, используя одну и ту же библиотеку дважды.

Я предполагаю, что поскольку библиотека ESP8366Ping.h определена, она создает экземпляр класса ( см. Отметку ниже ):

class PingClass {
  public:
    PingClass();

    bool ping(IPAddress dest,   byte count = 5);
    bool ping(const char* host, byte count = 5);

    int averageTime();

  protected:
    static void _ping_sent_cb(void *opt, void *pdata);
    static void _ping_recv_cb(void *opt, void *pdata);

    IPAddress _dest;
    ping_option _options;

    static byte _expected_count, _errors, _success;
    static int _avg_time;
};

#include "ESP8266Ping.impl.h"
PingClass Ping;                     // <----- This

#endif

Как ее можно решить ?

, 👍1


1 ответ


Лучший ответ:

2

С этой библиотекой... ты не можешь. Весь код находится в одном большом монолитном файле .h. Как вы уже хорошо знаете, это большое нет-нет. Автору следует дать большую пощечину.

Ближе всего вы могли бы сделать без переписывания всей библиотеки-просто копия определения класса от внешнего .H-файл и создать Экстерн для существующего объекта - может сделать свой собственный экземпляр ESP8266Ping.сек файл без слова#Include "ESP8266Ping.осущ.ч" и PingClass пинг; (последний из которых вам перейти на Экстерн).

,

Спасибо. Поскольку у меня нет никаких будущих неудач после обновления библиотеки, я, вероятно, буду использовать вызов внешней функции в "IPMonitor" для вызова соответствующей функции из класса "iot". И шлепки, @Guy . D

@Парень.D Я отправил запрос на извлечение с необходимыми изменениями. Возможно, вам захочется протестировать мою вилку: https://github.com/majenkotech/ESP8266Ping, @Majenko

Что ж... это очень мило с твоей стороны! Овации, @Guy . D