Go Down

Topic: [RESOLU][C++] Inclusion d'objet dans un autre avec paramètres (Read 181 times) previous topic - next topic

Ninnin

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


kamill

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.

hbachetti

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)
{
  
}


Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

kamill

Oui, c'est aussi une bonne solution à laquelle je n'avais pas pensé.

Ninnin

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

hbachetti

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.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Ninnin

En l'occurence dans mon projet, il y aura au max deux lcd (config par cavalier sur le PCB) :)

kamill

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.

Ninnin


Ninnin

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 :) !!!!!

Go Up