Il y a un loup que je ne vois pas

Bonjour à toutes et à tous,

Dans une application constituée d’un fichier “PbConst.ino” et d’un fichier “LesPages.cpp” je souhaite pouvoir utiliser la constante “NbZones” dans chacun des deux fichiers. Pour cela, je la crée dans le fichier “LesPages.cpp” et la déclare comme “extern” dans le fichier “PbConst.ino”. Cette construction fonctionne normalement. Si dans le fichier “PbConst.ino”.vous mettez en commentaire soit la ligne : majZn_Cy(zN); ou la ligne : leBouton.surAppui = &majJours; alors, ça compile, sinon, j’obtiens l’erreur suivante :

PbConst.cpp.o: In function `majJours()':
/Arduino/PbConst.ino:10: undefined reference to `nbZones'
collect2: error: ld returned 1 exit status

le fichier "PbConst.ino :

#include <BaseComp.h>

extern byte nbZones;
extern void majZn_Cy(byte);

CompBase leBouton;

void majJours() {
  byte zN;
  for (byte i = 0; i < nbZones; i++)
      zN = i;
  majZn_Cy(zN);
}

void setup() {
  leBouton.surAppui = &majJours;
}

void loop() {
}

le fichier “LesPages.cpp” :

#include <Arduino.h>

const byte nbZones = 6; // Nombre de zones

void majZn_Cy(byte Z) {
}

Le problème semble venir de l’affectation de la méthode “majJours” à la variable “surAppui” de l’instance “leBouton” de la classe “CompBase”.

“CompBase” est déclaré dans une bibliothèque que j’ai créée : “BaseComp.h” et BaseComp.cpp" qui, au complet représentent un bon millier de lignes. J’ai réussi à en extraire la partie congrue (quelques lignes seulement) qui occasionne le problème. La voici :

fichier “BaseComp.h” :

#ifndef BaseComp_h
#define BaseComp_h

#include <Arduino.h>

class CompBase {
public:
	CompBase() { // constructeur
		surAppui = NULL;
	}
	void (* surAppui)(); // pointeur sur une fonction d'action en cas d'appui sur le composant
	virtual void select();
};

#endif

le fichier “BaseComp.cpp” :

#include <Arduino.h>
#include <BaseComp.h>

void CompBase::select() { // fonction virtuelle
	if (surAppui != NULL)
		surAppui();
}

Qu’est-ce que "BaseComp ? C’est l’équivalent d’une bibliothèque de composants visuels qui répondent à des évènements. Dans mon cas, c’est un appui sur l’écran tactile qui est détecté via la méthode “select()” et qui, si un méthode a été attachée à la variable “surAppui”, va effectuer ce que doit faire cette méthode (ici, le méthode “majJours()”)

Pour en revenir au problème, si je n’affecte pas de méthode à la variable “surAppui”, le problème disparait … comme tout l’intérêt de ma construction.

A savoir : si je n’utilise pas la constante “nbZones” dans le fichier “PbComp.ino”, tout fonctionne correctement.

Pour autant je subodore que le problème tourne autour de cette affectation. Vous semble t-elle correcte ? quel pourrait être le “bug” dans tout ça ?

Je vous remercie d’avoir déjà pris la peine de lire tout cela et vous remercierai encore de votre aide.

Cordialement.

Pierre