j' ai déclarer un modèle de structure avec les structures associées dans un fichier main.h.
Pas de problème au niveau du main.cpp, le programme passe les structures par référence sans souci.
Mais j'ai besoin de lire des données dans un fichier myFct.cpp (pour l'exemple...) et là ça ne fonctionne pas.
J'étais persuadé qu'en déclarant mon modèle dans un fichier d'entête, puis en l'incluant dans les fichiers sources où j'en ai besoin cela fonctionnerais.
La version avec "#include "main.h" dans "myNextion.h"
// Partie tronqué car les trois ligne suivantes se répètent plusieurs fois...
from C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\main.h:4,
from C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.h:3,
from C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\main.h:4,
from C:\Users\weetoz\Documents\Arduino\sketch_aug31a\sketch_aug31a.ino:1:
main.h:1: error: #include nested too deeply
#include <Nextion.h>
^
main.h:4: error: #include nested too deeply
#include "myNextion.h"
^
Utilisation de la bibliothèque arduino_975481 version 2.2.0 dans le dossier: C:\Users\weetoz\Documents\Arduino\libraries\arduino_975481
exit status 1
#include nested too deeply
Ici problème d'inclusion. (Du moins pour ce que j'en comprends).
La version avec inclusion ifndef define et endif: (toujours dans le header)
myNextion.cpp:12: error: 'Serial1' was not declared in this scope
Serial1.print(command);
^
myNextion.cpp:12: error: 'command' was not declared in this scope
Serial1.print(command);
^
myNextion.cpp:14: error: 'VHAir' was not declared in this scope
command ="t11.txt=\""+String(VHAir.min)+"\"";
Ici, problème de portée.
Pour l'instant, mes fonctions ne renvoient rien et ne prennent pas de paramètres, ce qui, je pense m'autorise à tester les inclusions dans le fichiers source "myNextion.cpp". (même si je pense que ce n'est pas une bonne idée....)
Avec les inclusions commentés dans le header:
Dans le myNextion.cpp avec "#include "main.h" ":
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\sketch_aug31a.ino.cpp.o (symbol from plugin): In function `VHAir':
(.text+0x0): multiple definition of `VHAir'
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\sketch_aug31a.ino.cpp.o (symbol from plugin): In function `VHAir':
(.text+0x0): multiple definition of `VTAir'
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\sketch_aug31a.ino.cpp.o (symbol from plugin): In function `VHAir':
(.text+0x0): multiple definition of `DhtVal'
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\sketch_aug31a.ino.cpp.o (symbol from plugin): In function `VHAir':
(.text+0x0): multiple definition of `HumAir'
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\sketch_aug31a.ino.cpp.o (symbol from plugin): In function `VHAir':
(.text+0x0): multiple definition of `TempAir'
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Utilisation de la bibliothèque arduino_975481 version 2.2.0 dans le dossier: C:\Users\weetoz\Documents\Arduino\libraries\arduino_975481
exit status 1
Erreur de compilation pour la carte "maniacbug" Mighty 1284p 16MHz using Optiboot
Et avec ifndef...:
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp: In function 'void sendAirToNextion()':
myNextion.cpp:12: error: 'String' was not declared in this scope
String command ="t10.txt=\""+String(DhtVal.hum)+"\"";
^
myNextion.cpp:13: error: 'Serial1' was not declared in this scope
Serial1.print(command);
^
myNextion.cpp:13: error: 'command' was not declared in this scope
Serial1.print(command);
^
myNextion.cpp:15: error: 'VHAir' was not declared in this scope
command ="t11.txt=\""+String(VHAir.min)+"\"";
^
myNextion.cpp:22: error: 'DhtVal' was not declared in this scope
command ="t7.txt=\""+String(DhtVal.temp)+"\"";
^
myNextion.cpp:25: error: 'VTAir' was not declared in this scope
command = "t8.txt=\""+String(VTAir.min)+"\"";
^
C:\Users\weetoz\AppData\Local\Temp\arduino_build_926388\sketch\myNextion.cpp: At global scope:
myNextion.cpp:42: error: 'byte' does not name a type
byte* readNextNextionMessage() {
^
myNextion.cpp:103: error: variable or field 'printMessage' declared void
void printMessage(byte *message) {
^
myNextion.cpp:103: error: 'byte' was not declared in this scope
myNextion.cpp:103: error: 'message' was not declared in this scope
void printMessage(byte *message) {
^
myNextion.cpp:121: error: variable or field 'manageMessage' declared void
void manageMessage(byte* message) {
^
myNextion.cpp:121: error: 'byte' was not declared in this scope
myNextion.cpp:121: error: 'message' was not declared in this scope
void manageMessage(byte* message) {
^
Utilisation de la bibliothèque arduino_975481 version 2.2.0 dans le dossier: C:\Users\weetoz\Documents\Arduino\libraries\arduino_975481
exit status 1
'String' was not declared in this scope
J'suis un gros inculte des directives d'inclusions.
Là du coup j'ai compris comment on les utilise...
Et j'avais pas compris non plus pour le mot clé "extern". En fait, si j'ai compris, le modèle de structure ne pouvant être "extern" on déclare une structure (un type donc) qui elle peut-être "extern".