essai de class

bonjour,

je cherche a implementer une class pour comprendre comment cela fonctionne.
je rencontre une erreur que je n’arrive pas a resoudre.
Si vous pourriez me renseigner sur la correction ? Merci de votre aide :slight_smile:


Erreur affichee :

C:\User…\classDemarre.cpp:6:17: error: expected initializer before ‘int’
void Prog::Prog int Prog::set_values (int x) { // instance la valeur du program dans l’objet Prog
^


classDemarre.h :

/*

  • Prog.h - librairie pour afficher les numeros de 1 a 4
  • La date
  • Release
    */

#ifndef Prog_h
#define Prog_h

#include “Arduino.h”
using namespace std;

class Prog{
private:

public:
int numProg;
void set_values (int); // saisie du numeros
Prog(int);
int phase(){return numProg;} // test1 retour valeur du num
};

#endif


classDemarre.cpp :

#include “Arduino.h”
#include “classDemarre.h”
void Prog::Prog int Prog::set_values (int x) { // instance la valeur du num dans l’objet prog
numProg = x;
}


classDemarre2.ino :confused:

// classDemarre2 - essai de fichier class
//
#include <LiquidChrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {

Prog Prog1, Prog2, Prog3; // creation 3 instances (objets) de la class
Prog1.set_values(1);
Prog2.set_values(2);
Prog3.set_values(3);

}

void loop() {
serial.print(Prog1.phase()); // affichage de la phase 1
Serial.print(Prog2.phase());// et ainsi de suite
Serial.print(Prog3.phase());

}

Up ?

void Prog::Prog int Prog::set_values (int x) { // instance la valeur du num dans l'objet prog
numProg = x;
}

Cette ligne n’a pas de sens.
Le constructeur n’a pas de type de retour.
Dans son codage, le constructeur est une méthode comme une autre le code doit être placé entre accolades et les arguments d’entrée entre parethèses.
Je pense que tu voulais écrire quelque chose comme ça:

Prog::Prog(int x) { // instance la valeur du num dans l'objet prog
numProg = x;
}

PS: Il faut placer le code entre balises code (le bouton </> en haut de la fenêtre d’édition) sinon la mise en forme est perdue.
PPS: le up est grossier

Bonsoir fdufnews et merci de m'avoir mis sur le bon chemin. Merci pour les balises et desole pour le up, je ne voulais pas etre grossier bien sur. :)

Jái une autre erreur qui s’affiche. Je ne sais pas ce quíl faut faire dans ce cas aussi.
je nái pas trouve dínformations.
Síl vous plait encore un peu d’aide. Merci :slight_smile:

classDemarre.h :

* Prog.h - librairie pour afficher les numeros de 1 a 4
* La date
* Release 
*/

#ifndef Prog_h
#define Prog_h

#include "Arduino.h"
using namespace std;

class Prog{

private:
	int numProg;

public:
	void set_values (int); // saisie du numeros
	Prog(int);
	int phase(){return numProg;
	} // test1 retour valeur du num
};
#endif

classDemarre.cpp :

[/#include <Arduino.h>
#include "classDemarre.h"



Prog::Prog(int x) { // instance la valeur du num dans l'objet prog
numProg = x;

}

le fichier classDemarre2.ino

#include <LiquidCrystal.h>
#include "classDemarre.h"
// class 2 - essai de fichier class
// 

LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
 
}

Prog Prog1, Prog2, Prog3; // creation 3 instances (objets) de la class
Prog1.set_values(1);
Prog2.set_values(2);
Prog3.set_values(3);


Serial.print(Prog1.phase()); // affichage de la phase 1
Serial.print(Prog2.phase());// et ainsi de suite
Serial.print(Prog3.phase());


void loop() {

}

voici lérreur qui sáffiche :

[/
classDemarre2.ino:12:6: error: no matching function for call to 'Prog::Prog()'
classDemarre2.ino:12:6: note: candidates are:
In file included from classDemarre2.ino:2:0:
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note: Prog::Prog(int)
 Prog(int);
 ^
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note:   candidate expects 1 argument, 0 provided
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note: Prog::Prog(const Prog&)
 class Prog{
       ^
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note:   candidate expects 1 argument, 0 provided
classDemarre2.ino:12:13: error: no matching function for call to 'Prog::Prog()'
classDemarre2.ino:12:13: note: candidates are:
In file included from classDemarre2.ino:2:0:
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note: Prog::Prog(int)
 Prog(int);
 ^
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note:   candidate expects 1 argument, 0 provided
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note: Prog::Prog(const Prog&)
 class Prog{
       ^
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note:   candidate expects 1 argument, 0 provided
classDemarre2.ino:12:20: error: no matching function for call to 'Prog::Prog()'
classDemarre2.ino:12:20: note: candidates are:
In file included from classDemarre2.ino:2:0:
C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note: Prog::Prog(int)
 Prog(int);
 ^
C:\Users\...\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note:   candidate expects 1 argument, 0 provided
C:\Users\...\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note: Prog::Prog(const Prog&)
 class Prog{
       ^
C:\Users\...\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note:   candidate expects 1 argument, 0 provided
classDemarre2.ino:13:1: error: 'Prog1' does not name a type
classDemarre2.ino:14:1: error: 'Prog2' does not name a type
classDemarre2.ino:15:1: error: 'Prog3' does not name a type
classDemarre2.ino:18:1: error: 'Serial' does not name a type
classDemarre2.ino:19:1: error: 'Serial' does not name a type
classDemarre2.ino:20:1: error: 'Serial' does not name a type
no matching function for call to 'Prog::Prog()'code]

Je comprend bien qúe la declaration des objets nést pas bonne mais je ne sais pas comment il faut le faire correctement. Help
Merci de votre aide :slight_smile:

Tu as défini un constructeur
Prog::Prog(int x)
celui-ci attend un argument.

Lorsque tu instancies l’objet prog tu le fais comme ça
Prog Prog1, Prog2

Ce qui génère une erreur
Le compilateur ne trouve pas de constructeur Prog qui corresponde à ce que tu as tapé. Il n’en voit qu’un (celui que tu as déclaré) mais il attend un argument.

C:\Users\guy\AppData\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note: Prog::Prog(int)
 Prog(int);
 ^
C:\Users\...\Local\Temp\build6390483840192797332.tmp\classDemarre.h:19:1: note:   candidate expects 1 argument, 0 provided
C:\Users\...\Local\Temp\build6390483840192797332.tmp\classDemarre.h:13:7: note: Prog::Prog(const Prog&)

Pour résoudre ton problème, 2 possibilités:

  • tu passes une valeur au constructeur existant
    Prog Prog1(1), Prog2(2)
  • tu déclares un second constructeur sans argument
    Prog::Prog(void) { // instance sans la valeur du num dans l’objet prog
    numProg = x; // soit tu supprimes cette ligne soit tu forces une valeurs par défaut

}

Merci de ta reponse fdufnews.

Si je comprends bien ta proposition, je declare le num de l'objet directement a sa declaration.

Mais je voulais utiliser les fonctions de la class pour faire cela :confused: . Je debute et je ne comprends pas comment il faudrait faire pour instancier les objets prog a sa declaration dans le .ino. Je pensais initialiser le int a partir de set_values afin de me serivr de cette class pour en creer d'autre sur la meme idee. Qu'est ce qui ne va pas dans ma class pour faire cela ?

Merci encore :)

Hop hop, il semble que jái trouve. je post la reponse au cas ou cela interesseRAI quelqu'un et puis au cas ou si vous voyez des complements.

classDemarre :

/*
 * Prog.h - librairie pour afficher les numeros de 1 a 4
 * La date
 * Release 
 */

#ifndef Prog_h
#define Prog_h

#include "Arduino.h"
using namespace std;

class Prog{
int numProg;

public:
void set_values (int); // saisie du numeros
//Prog(int);
int phase(){return numProg;} // test1 retour valeur du num
};

#endif

classeDemarre.cpp

#include "Arduino.h"
#include "classDemarre.h"



void Prog::set_values(int x) { // instance la valeur du num dans l'objet prog
numProg = x;

}

classDemarre2.ino

#include "Arduino.h"
#include "classDemarre.h"



void Prog::set_values(int x) { // instance la valeur du num dans l'objet prog
numProg = x;

}

En fait jávais ajouter une reference en trop dans le .h concernant la valeur de prog() si je ne m'abuse. Merci beaucoup fdufnews pour ton intervention qui m'a beaucoup aide a debugger la baaaete. je peux continuer a me prendre la tete sur la suite. bonne continuation fdufnews.