ArduinoJson определить как extern
Мой скетч содержит 2 файла .h. один определяет
в файле 1st .h
:
#define JSON_SIZE_IOT 400
#define JSON_SIZE_SKETCH 300
StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
StaticJsonDocument<JSON_SIZE_SKETCH> sketchJSON;
а другим нужно определить paramJSON
и sketchJSON
как extern
в файле 2nd .h
:
extern JsonDocument paramJSON;
extern JsonDocument paramJSON;
но я получаю эту ошибку:
error: conflicting declaration 'ArduinoJson6172_91::StaticJsonDocument<400u> paramJSON'
StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
....
: previous declaration as 'ArduinoJson6172_91::JsonDocument paramJSON'
extern JsonDocument paramJSON;
@Guy . D, 👍0
Обсуждение1 ответ
Лучший ответ:
Для extern
все определение должно соответствовать определению "master".
Итак, если у вас есть:
StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
тогда вы extern
должен быть:
extern StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
Конечно, вы должны убедиться, что ваш JSON_SIZE_IOT
одинаков для обоих - так что лучше, если это происходит из общего источника.
Это известно как явное объявление экземпляра, и вы можете прочитать больше об этом в справочнике Class template C ++.
Разве "StaticJsonDocument" не является шаблоном? вот почему я использовал JsonDocument
. Поскольку JSON_SIZE_IOT
определен с помощью #define
- как я могу его использовать? (препроцессор не передаст extern
), @Guy . D
@Парень.D Вы не можете `перейти" к другому типу. Если вы хотите иметь что-то еще, то дайте себе указатель на него и сделайте приведение к этому предопределенному объекту., @Majenko
- NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
- Чтение файла из SPIFFS в nodemcu с использованием ArduinoJson
- Получение всех данных моего объекта JSON из Serial.read() сразу
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- Цикл foreach Arduino JSON
- Проанализировать большой ответ json с помощью ESP8266
- Публиковать данные json в mqtt
- ArduinoJSON v6 – передача буфера как параметра функции
пожалуйста , посмотрите на фрагменты кода , которые вы опубликовали ... проблема , по - видимому , очевидна ... ошибка copy'n'paste снова поражает, @jsotola
@jsotola вы имеете в виду "JsonDocument" вместо "StaticJsonDocument`? это не работает в любом случае, @Guy . D
нет... вы сделали дубликат заявления, @jsotola
@jsotola См . Редактировать, какой фрагмент кода принадлежит какому файлу .h (если только я не понимаю, почему это дубликат), @Guy . D
не делайте определения переменных в файле h, который включен в несколько единиц перевода, @Juraj
@Juraj Я понимаю, что вы говорите, это можно сделать, но это очень не понятный способ. Значит ли это , что это невозможно сделать ?, @Guy . D
определение переменной всегда должно быть в cpp. in h, только если вы знаете, что делаете. но в to extern: он должен быть одного типа, включая типы шаблонов., @Juraj
@Juraj Спасибо. Мой файл
.h
суммирует каждую функциональность, используемую в sketch. Кстати, в моем случае нет.cpp
, только ".ino" и ".h". Как бы вы это сделали, если бы существовал файл ".cpp"?, @Guy . Dзатем поместите его в ino или добавьте файл cpp, @Juraj