[résolu]Classes ++, héritage, pB compilation


bonjour,
débutant arduino il n'y pas si longtemps, je viens, en amateur,  de l'environnement delphi (pascal objet).
j'ai commencé à m'adapter sans encore trop de soucis au langage c d'arduino et j'ai souhaité passer au c++ pour commencer à comprendre et programmer des objets.
je n'ai pas encore de gros problème avec le concept de programmation orientée objet mais je rencontre quelques difficultés à structurer mes différents fichiers pour que la compilation fonctionne. (fichiers *.h et *.ccp)
a ce propos, j'ai lu avec attention les problèmes voisins déja traités sur ce forum :

http://forum.arduino.cc/index.php?topic=411741.msg2843394#new

selon que j'utilise mon pc d'atelier (avec winxp) ou de bureau (avec win10) le comportement est différent :
"le programme compile ou pas selon l'environnement"
je vous propose, à des fins de remarque et critique, un exemple d'essai ou j'ai mis 3 classes :
- la classe led basique pour allumer ou éteindre une led
- la classe ledt avec en plus une tempo
- la classe ledth descendante de la classe led mais avec une méthode supplémentaire pour inclure la tempo dans l'objet.
ce que je publie ici fonctionne (compilation et éxécution correcte sur un arduino nano) avec mon pc de bureau,; mais je me fais "jeter" à la compilation sur le pc d'atelier.
j'ai bien tenté de créer sur win10 un fichier *.ccp pour séparer l'implémentation des méthodes des déclarations de classe contenues dans le fichier *.h .... mais la compilation avorte.


objet_1_heritage.ino

code: [select]

//************************************
//* classes led, ledt, ledth
//* compilés en arduino 1.6.7 win10
//* hardware pour pico, nano, micro ok
//************************************
#include "classe_led_t.h"
//led pico(13);  // instance pico de la classe led sur la pin 13
//ledt nano(13); // instance nano de la classe ledt sur pin 13
  ledth micro(13);// instance micro de la classe ledth héritière de led sur pin 13
void setup()
{ }

void loop()
{ //pico.allumer();delay(20);pico.eteindre();delay(1200);//1170 octets prog 19 ram
  //nano.allumert(20); nano.eteindret(200);// 1156 octets prog 11 ram
  micro.allumerth(20);micro.eteindreth(800);//1234 octets prog 25 ram
}


classe_led_t.h

code: [select]

//**************************
// définition type classe led surchargeable
//**************************
class led
 {protected : //permettre l'accés des champs seulement aux descendants
    byte pin1;
    byte etat;
    virtual void rafraichir();
 // rafraichir() est surchargeable dans une classe "fille"
  public :
    led(byte apin1);//constructeur
    void allumer();
    void eteindre();
 };
 
 //********************    
 //méthodes publiques de la classe led
 
 led::led(byte apin1)//constructeur
  {pin1=apin1;
   pinmode(pin1,output);
  }
 void led::allumer()
  {etat=high;
   rafraichir();
  }
 void led::eteindre()
  {etat=low;
   rafraichir();
  }
 //******************
 // méthode privée de la classe led
 void led::rafraichir()
  {digitalwrite(pin1,etat);}

//*********************************************
// définition type classe ledt (led avec tempo)
//*********************************************  
class ledt
  {private :
      byte pin;
      byte etat;
      void rafraichir();
   public :
     ledt(byte apin);
     void allumert(word temps);
     void eteindret(word temps);  
  };
//méthodes publiques de la classe led_t

 ledt::ledt(byte apin)//constructeur
  {pin=apin;
   pinmode(pin,output);
  }    
void ledt::allumert(word temps)
  {etat=high;
   rafraichir();delay(temps);
  }
void ledt::eteindret(word temps)
  {etat=low;
   rafraichir();delay(temps);
  }    
// méthodes privées  de la classe led_temps  
void ledt::rafraichir()
  {digitalwrite(pin,etat);}

//*****************************
// définition type classe led_th tempo
// descendante de la classe led
//*****************************  

class ledth : public led
 {private :
    void rafraichir(); // methode surchargée de led
  public :
    ledth(byte apin1); //constructeur
    void allumerth(word temps);
    void eteindreth(word temps);
 };

void ledth::allumerth(word temps)
  {etat=high;
   rafraichir();delay(temps);
  }
  
void ledth::eteindreth(word temps)
  {etat=low;
   rafraichir();delay(temps);
  }
  
void ledth::rafraichir()
  {digitalwrite(pin1,etat);
   // ici fait la même chose que pour la classe led
   // éventuellement ajouter autre action : par ex allumer 2eme led
  }
    
ledth::ledth(byte apin1):led(apin1)//constructeur de ledth
   {// actuellement ne fait rien de plus
   }  
  



je sais les talents et la bonne volonté des participants au forum et je fais appel à vous pour m'aider à m'en sortir.
merci par avance.

serge .d

ps : n'hésitez pas à formuler des critiques quand à la qualité de la structuration et à la forme de mes exemples.
les critiques seront bienvenues, je suis  issu de filière "électrique" mais pas "informatique"

quote
selon que j'utilise mon pc d'atelier (avec winxp) ou de bureau (avec win10) le comportement est différent :
"le programme compile ou pas selon l'environnement"
vous avez la même version de l'ide sur les 2?
quand il ne compile pas, c'est quoi l'erreur?


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > [résolu]Classes ++, héritage, pB compilation


arduino

Comments

Popular posts from this blog

Valutazione Template - Joomla! Forum - community, help and support

SD Datastring Convention

First use of Arduino Uno : avrdude error on Blink uploading