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
Как ее можно решить ?
@Guy . D, 👍1
1 ответ
Лучший ответ:
С этой библиотекой... ты не можешь. Весь код находится в одном большом монолитном файле .h. Как вы уже хорошо знаете, это большое нет-нет. Автору следует дать большую пощечину.
Ближе всего вы могли бы сделать без переписывания всей библиотеки-просто копия определения класса от внешнего .H-файл и создать Экстерн
для существующего объекта - может сделать свой собственный экземпляр ESP8266Ping.сек
файл без слова#Include "ESP8266Ping.осущ.ч"
и PingClass пинг;
(последний из которых вам перейти на Экстерн
).
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Массив динамического размера в качестве члена класса
- Как перебрать объекты или передать объект функции?
- C++ Undefined reference to 'Class:Function()'
- Прерывания внутри класса, связанные с функцией класса
- Присоедините функцию Arduino ISR к члену класса
- Недопустимое использование нестатической функции-члена
Спасибо. Поскольку у меня нет никаких будущих неудач после обновления библиотеки, я, вероятно, буду использовать вызов внешней функции в "IPMonitor" для вызова соответствующей функции из класса "iot". И шлепки, @Guy . D
@Парень.D Я отправил запрос на извлечение с необходимыми изменениями. Возможно, вам захочется протестировать мою вилку: https://github.com/majenkotech/ESP8266Ping, @Majenko
Что ж... это очень мило с твоей стороны! Овации, @Guy . D