L'inclusion de bibliothèques à l'intérieur d'une bibliothèque

Bonjour à tous.

Voilà, je suis en train de créer une bibliothèque qui ajoute des améliorations à la bibliothèque LiquidCrystal.
Je voudrais savoir comment je peux ajouter toutes les fonctions de la bibliothèque LiquidCrystal dans ma bibliothèque sans réécrire chaque fonction une à une.

Si c'est possible.

Merci.

tu garde la bibliothèque d'origine, tu la modifie avec tes ajout et tu l'utilise, rien de plus simple ^^

Je peux rajouter des fonctions dans LiquidCrystal ?!?

Disons que j'appelle lcd mon objet LiquidCrystal.
Je dois initialiser mon objet dans chaque fonction rajoutée dans la bibliothèque LiquidCrystal ?

Ca ne me donne pas le bon résultat quand j'essaye d'utiliser une fonction qui se situe juste au-dessus dans le ".cpp"

Bonjour,

Deux choix :

  1. (simple, rapide mais pas très propre) tu copies la librairie d'origine et tu ajoutes tes fonctions dedans directement.
  2. (propre, mais plus complexe) tu fait une classe qui étend la classe LiquidCrystal et tu met tes fonctions dans cette classe C++ étendu.

Dans les deux cas des notions de programmation en C++ et en programmation orienté objets sont obligatoires.
(voir sur le site du zéro si besoin ;))

J'ai opté pour la deuxième option et tout marche.
Exceptée une fonction que je n'arrive pas à remettre. La fonction print.

Elle n'apparait pas dans le .cpp de LiquidCrystal.

Pas d'idées ?!

y à qu'un seul .cpp ? une lib peut en avoir plusieurs fait gaff à ça

AlexandreJ:
J'ai opté pour la deuxième option et tout marche.
Exceptée une fonction que je n'arrive pas à remettre. La fonction print.

Elle n'apparait pas dans le .cpp de LiquidCrystal.

La classe LiquidCrystal hérite des fonctions de "Print" (ou "Stream", je sait plus) :wink:

Oui mais voilà le soucis.

J'ai deux choix :
Soit je tente de rajouter directement mes fonctions dans la LiquidCrystal library :

LiquidCrystal utilise 'Print.h' grâce à sa fonction Send (qui est une fonction privée)

Oui mais voilà le soucis.

J'ai deux choix :

  • Soit je tente de rajouter directement mes fonctions dans la LiquidCrystal library :
    Problème : Dans les fonctions que je crée, j'utilise les autres fonctions de LiquidCrystal. J'arrive à le runner mais cela me donne des
    résultats éronnés.
  • Soit je tente de recopier toutes les fonctions de LiquidCrystal dans une nouvelle bibliothèque + mes nouvelles fonctions :
    Problème : LiquidCrystal utilise 'Print.h' grâce à sa fonction Send (qui est une fonction privée). Je ne peux pas utiliser les fonctions
    privées de LiquidCrystal.

Quoique je fasse, j'arrive dans une impasse.
Quelqu'un aurait une idée sur quel choix faire et comment résoudre le problème ?

Arf, c'est encore le coup d'un dév de la team Arduino qui n'as pas compris le principe des protected ...

Dans ce cas tu peut faire deux choses :

  • modifier les private en protected dans la classe LiquidCrystal
  • ajouter ta classe en "friend" dans le .h de LiquidCrystal
    En fait de par le private tu n'as pas trop de choix vu que c'est fait pour bloquer toute utilisation par héritage.

Sinon tu fait une copie de la classe LiquidCrystal, de toute façon vu comment c'est parti tu n'auras pas trop le choix finalement.
(et si ça marche pas ... et bien c'est qu'il y a un problème avec ton code ;))

Voici mon code dans ma librairie LiquidCrystal.h :

class LiquidCrystal : public Print {
	friend class Function;
public:
        ......
protected : 
        ......
};
class Function	{
public :
    ........
};

Mais ça me met toujours une erreur : "class LiquidCrystal' has no member named '(nom de ma fonction)'.

T'as oublié un truc :wink:

class Function {

Manquerait pas une déclaration d'héritage par hasard ? :wink:

Du genre :

class Function : public LiquidCrystal {

Ps : si la fonction que tu veut est "protected" et non "private" dans la classe LiquidCrystal le "friend" devient inutile.