Arduino Forum

International => Français => Topic started by: Ninnin on Mar 29, 2019, 05:35 pm

Title: [RESOLU][C++] Inclusion d'objet dans un autre avec paramètres
Post by: Ninnin on Mar 29, 2019, 05:35 pm
Hello la commu :)

Je rencontre un souci que j'avais eu il y a longtemps mais impossible de me rappeler comment faire ni retrouver la solution :-/

En gros, j'ai un fichier .h:
#include <LiquidCrystal_I2C.h>

Code: [Select]

class truc {
private:
LiquidCrystal_I2C lcd(0x27,20,4);
};


Mais voilà, dans un .h on peut pas déclarer de variables comme cela...

Et je sais plus comment faire :-s

Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: kamill on Mar 29, 2019, 05:58 pm
Bonjour,

Tu peux déclarer un pointeur sur ta classe LiquidCrystal_I2C et l'instancier dans le constructeur
Code: [Select]
class truc {
  public:
    truc() {pLcd = new LiquidCrystal_I2C(0x27, 20, 4);}
  private:
    LiquidCrystal_I2C *pLcd;
};


Tu peux aussi le déclarer static
Code: [Select]
class truc {
  private:
    static LiquidCrystal_I2C lcd;
};


et l'instancier dans le .cpp
Code: [Select]
LiquidCrystal_I2C truc::lcd(0x27,20,4);

Ca présente l'avantage de partager la même instance de l'afficheur entre toutes les instances de truc.
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: hbachetti on Mar 29, 2019, 06:05 pm
La même chose sans pointeur, ce qui permet d'appeler les méthodes de l'objet comme ceci :

lcd.method();

au lieu de

lcd->method();

Si l'objet lcd est appelé à être détruit à un moment donné, préférer le pointeur, sinon préférer cette solution, sans allocation dynamique.

Code: [Select]

#include <LiquidCrystal_I2C.h>

class truc {
  private:
    LiquidCrystal_I2C lcd;
  public:
    truc(void);
};

truc::truc(void) :
lcd(0x27, 20, 4)
{
  
}


Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: kamill on Mar 29, 2019, 06:07 pm
Oui, c'est aussi une bonne solution à laquelle je n'avais pas pensé.
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: Ninnin on Mar 29, 2019, 06:17 pm
Super ! Merci pour les réponses les gars ;)
C'est pas un truc qu'on fait tous les jours (du moins pour ma part ^^)
Je vais modifier mon code avec vos exemples :)

Big kisses :p
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: hbachetti on Mar 29, 2019, 06:24 pm
L'objet statique est valable aussi, car si tu crées plusieurs objets de la classe truc, l'avantage est que l'objet LCD reste unique.

Comme c'est un objet lié à du hardware, il est rare d'en instancier plusieurs, et pour cause. Les LCD ne se multiplient pas tout seuls comme les octets.

Donc, statique ça va bien pour ça.
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: Ninnin on Mar 29, 2019, 06:38 pm
En l'occurence dans mon projet, il y aura au max deux lcd (config par cavalier sur le PCB) :)
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: kamill on Mar 29, 2019, 06:49 pm
Donc tu ne peux pas mettre la définition du lcd avec ses paramètres dans la classe. Il faut forcément passer l'adresse en paramètre.
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: Ninnin on Mar 29, 2019, 06:50 pm
Je pensais aussi, mais comment faire >_<
Title: Re: [C++] Inclusion d'objet dans un autre avec paramètres
Post by: Ninnin on Mar 29, 2019, 07:43 pm
Trouvé ^^
Bête mais je cherchais depuis vos soluces, et y a un ";" qui a sauté dans le fichier qui était lu par le compilateur juste avant mon lcd.h......

Comme quoi des fois ça tient pas à grand chose les conneries ^^

Merci encore :) !!!!!