Salut,
Reprenons les choses depuis le début.
À en juger par le code que tu nous donnes, tu maitrises déjà cette notion, mais rappelons là malgré tout : Tes classes sont des sortes de moules à instances. En d'autres termes, lorsque tu crée une classe, tu crée effectivement un couple Truc.h / Truc.cpp de sorte à pouvoir créer des instances de Truc. Jusque là, ça va.
La première petite maladresse se situe dans ton Truc.cpp. En effet, tu implémente une méthode (Fct()) sans que celle-ci n'ait été déclarée dans ton Truc.h. Il faut donc la déclarer dans le fichier Truc.h :
#ifndef Truc_h
#define Truc_h
class Machin {
public:
void funct();
private:
int x;
int y;
};
#endif
Tu remarqueras également que j'ai modifié la portée de x et y. En POO, la règle veut que seuls les méthodes de la classe soient capables d'accéder aux attributs de ladite classe (mais ça compilera/fonctionnera quand même).
J'ai également enlevé la ligne :
Machin machin[6][4]; // tableau de Machin
Elle n'a rien a faire ici, on y revient un peu plus tard.
Passons maintenant à ton fichier Truc.cpp. Ce fichier est là pour implémenter les méthodes de ta classes. En l'occurrence, ta classe n'a ici qu'une méthode : funct();.
Tout d'abord, il te manque l'opérateur de résolution de portée ( :: ) chargé d'indiquer au compilateur que la méthode appartient à ta classe. Si on corrige ça, ça donne le code suivant :
#include <Truc.h>
void Truc::funct() {
// ...
}
Reste à implémenter cette méthode, et c'est là qu'il y a une petite boulette.
Au début, je te disais qu'une classe était un moule à instance. Or, dans ton code, tu travailles sur une instance, et non sur le moule. J'arrive pas à faire plus clair, l'exemple devrait parler un peu plus :
#include <Truc.h>
void Truc::funct() {
this->y = 5; // le mot clé 'this' indique que tu travaille sur l'attribut de la classe, et non sur une instance qui n'existe pas encore
}
Ton code devrait maintenant compiler. Voyons comment utiliser ta classe au sein de ton programme :
#include <Truc.h>
void setup() {
// on crée une INSTANCE de la CLASSE Truc :
Truc machin;
// on appelle la méthode funct() sur l'INSTANCE :
machin.funct();
}
void loop() {
// ...
}
Et là, ton attribut y à la valeur 5.
Tu n'as plus qu'à modifier ta méthode pour quelle soit capable de mettre à jour ton attribut en fonction d'un paramètre que tu lui passes :
Truc.h :
// ...
class Machin {
public:
void funct(int);
// ...
Truc.cpp :
void Truc::funct(int val) {
this->y = val; // l'intérêt des setters et de réaliser des tests avant d'assigner la valeur. on assure alors qu'on ne mets pas des valeurs interdites, etc. passons pour l'exemple.
}
Ainsi, dans ton programme :
Bidule.ino :
#include <Truc.h>
void setup() {
// on crée notre instance :
Truc machin;
machin.funct(5);
// L'attribut 'y' vaut désormais 5.
machin.funct(42);
// L'attribut 'y' vaut désormais 42.
// Exemple avec ton tableau :
// On crée un tableau de Truc :
Truc tableauDeTrucs[6][4];
// On appelle funct() sur l'élément [1][1] :
tableauDeTrucs[1][1].funct(666);
// L'attribut 'y' de l'élément [1][1] du tableau de Truc vaut désormais 666.
}
void loop() {
// ...
}
En espérant avoir été suffisamment clair,
À bientôt,
--
N.