My sketch contains 2 .h
files. one defines
on 1st .h
file:
#define JSON_SIZE_IOT 400
#define JSON_SIZE_SKETCH 300
StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
StaticJsonDocument<JSON_SIZE_SKETCH> sketchJSON;
and other need to define paramJSON
and sketchJSON
as extern
on 2nd .h
file:
extern JsonDocument paramJSON;
extern JsonDocument paramJSON;
but I get this error:
error: conflicting declaration 'ArduinoJson6172_91::StaticJsonDocument<400u> paramJSON'
StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
....
: previous declaration as 'ArduinoJson6172_91::JsonDocument paramJSON'
extern JsonDocument paramJSON;
1 Answer 1
For an extern
the whole definition has to match the "master" definition.
So if you have:
StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
then you extern
has to be:
extern StaticJsonDocument<JSON_SIZE_IOT> paramJSON;
Of course you have to make sure your JSON_SIZE_IOT
is the same for both - so it's best if that comes from a common source.
This is known as explicit instantiation declaration and you can read more about it in the Class template C++ reference.
-
Doesn't
StaticJsonDocument
a template ? that is why I usedJsonDocument
. SinceJSON_SIZE_IOT
defined using#define
- how can I use it? ( pre-processor won't passextern
)guyd– guyd2021年01月11日 12:16:28 +00:00Commented Jan 11, 2021 at 12:16 -
@Guy.D You can't
extern
to a different type. If you want to have something else then give yourself a pointer to it and do a cast to that pre-defined object.Majenko– Majenko2021年01月11日 12:19:54 +00:00Commented Jan 11, 2021 at 12:19
JsonDocument
insteadStaticJsonDocument
? it does not work either way