Bonjour, je travail sur une classe de gestion de boutons, j'utilise ce code, avec pour but de déclarer un fonction a appeler pour chaque boutons, quand le bouton est cliqué, ça me plante au moment de lancer cette fonction extérieur a la classe depuis la classe
F:\Mes documents\Documents\Arduino\teststrucVecteur\teststrucVecteur.ino: In member function 'void boutonsPage::test(uint32_t, uint32_t)':
teststrucVecteur:32:15: error: expression cannot be used as a function
*fonction();
^
exit status 1
expression cannot be used as a function
class boutonsPage{
public:
boutonsPage(uint32_t x, uint32_t y, uint32_t h, uint32_t l,void (* onClik)(void));
void test(uint32_t px, uint32_t py);
private:
uint32_t x;
uint32_t y;
uint32_t h;
uint32_t l;
// ici la fonction extérieur a la classe a utiliser en cas de clic dans le bouton
void onClik(void);
};
boutonsPage::boutonsPage(uint32_t x, uint32_t y, uint32_t h, uint32_t l,void (* fonction)(void)){
//j'affecte a mes variables de classe les valeur du bouton
this->x=x;
this->y=y;
this->h=h;
this->l=l;
// ici la fonction extérieur a la classe a utiliser en cas de clic dans le bouton
this->onClik(void)=&fonction(void);// <======= problème !
}
void boutonsPage::test(uint32_t px, uint32_t py){
//je control si le clic est dans la zone du bouton
if(x<=px<=(x+l) and y<=py<=(y+h)){
//puisque le clic est dans la zone je lance la fonction qui a était déclaré
onClik();
}
}
//////////////////////////////////
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
// je déclare un bouton nommé bt1
// a une position x=0, y=0 de largeur 100 et hauteur 50
// et donc le clic on lance la fonction " fermer "
boutonsPage bt1(0,0,100,50,fermer);
void fermer(void){
//les actions
}
void setup() {
}
void loop() {
//je cré des variable pour les position x,y du clic
uint16_t t_x = 0, t_y = 0;
// je récupère ces position avec test de clic
boolean pressed = tft.getTouch(&t_x, &t_y, 100);
// s'il y a clic
if(pressed){
//je lance test avec les position du clic
bt1.test(t_x,t_y);
}
}
la question est vraiment de savoir comment pointer convenablement la fonction externe a la classe pour la lancer depuis la classe
class boutonsPage{
public:
boutonsPage(uint32_t x, uint32_t y, uint32_t h, uint32_t l);
void test(uint32_t px, uint32_t py,void (*onClik)(void));
private:
uint32_t x;
uint32_t y;
uint32_t h;
uint32_t l;
};
boutonsPage::boutonsPage(uint32_t x, uint32_t y, uint32_t h, uint32_t l){
//j'affecte a mes variables de classe les valeur du bouton
this->x=x;
this->y=y;
this->h=h;
this->l=l;
}
void boutonsPage::test(uint32_t px, uint32_t py,void (*onClik)(void)){
//je control si le click est dans la zone du bouton
if(x<=px<=(x+l) and y<=py<=(y+h)){
//puisque le click est dans la zone je lance la fonction qui a etait déclaré
onClik();
}
}
//////////////////////////////////
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void fermer(void){
//les actions
}
// je declare un bouton nomé bt1
// a une position x=0, y=0 de largeure 100 et hauteur 50
// et donc le click on lance la fonction " fermer "
boutonsPage bt1(0,0,100,50);
void setup() {
}
void loop() {
//je cre des variable pour les position x,y du click
uint16_t t_x = 0, t_y = 0;
// je recuper ces position avec test de click
boolean pressed = tft.getTouch(&t_x, &t_y, 100);
// s'il y a click
if(pressed){
//je lance test avec les position du click
bt1.test(t_x,t_y,&fermer);
}
}
mais je voudrais declarrer et stocker des le debut ce pointeur vers fonction, une idée ?
class boutonsPage{
public:
boutonsPage(uint32_t x, uint32_t y, uint32_t h, uint32_t l,void (*onClik)(void));
void test(uint32_t px, uint32_t py);
private:
uint32_t x;
uint32_t y;
uint32_t h;
uint32_t l;
void (*fnc)(void);
// ici la fonction exterieur a la classe a utiliser en cas de click dans le bouton
};
boutonsPage::boutonsPage(uint32_t x, uint32_t y, uint32_t h, uint32_t l,void (*onClik)(void)){
//j'affecte a mes variables de classe les valeur du bouton
this->x=x;
this->y=y;
this->h=h;
this->l=l;
fnc=onClik;
}
/*
boutonsPage::inits(void (*fonction)()){
// ici la fonction exterieur a la classe a utiliser en cas de click dans le bouton
this->onClik()=&fonction;// <======= probléme !
}*/
void boutonsPage::test(uint32_t px, uint32_t py){
//je control si le click est dans la zone du bouton
if(x<=px<=(x+l) and y<=py<=(y+h)){
//puisque le click est dans la zone je lance la fonction qui a etait déclaré
fnc();
}
}
//////////////////////////////////
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void fermer(void){
//les actions
}
// je declare un bouton nomé bt1
// a une position x=0, y=0 de largeure 100 et hauteur 50
// et donc le click on lance la fonction " fermer "
boutonsPage bt1(0,0,100,50,&fermer);
//bt1.onClik=;
void setup() {
}
void loop() {
//je cre des variable pour les position x,y du click
uint16_t t_x = 0, t_y = 0;
// je recuper ces position avec test de click
boolean pressed = tft.getTouch(&t_x, &t_y, 100);
// s'il y a click
if(pressed){
//je lance test avec les position du click
bt1.test(t_x,t_y);
}
}