pb de pointeurs sur fonctions en c++

pb de pointeurs sur fonctions en c++ - C++ - Programmation

Marsh Posté le 21-10-2003 à 21:14:08    

Kikoo All
 
Voila je viens de me lancer dans la creation d une calculette sous Linux en C++ seulement je rencontre un gros probleme de compilation  :/ voila mes fichiers sources toutes aides est la bienvenue :)
 
fichier .cpp :
 
#include "calculette.h"
 
void Touche::t0( int result ) {
    essai->setText("Machin" );
}
 
Touche::Touche( QWidget *parent, int nb, const char *name  )
      : QVBox( parent, name )
{
    bouton[0].aff='7';
    bouton[1].aff='8';
    bouton[2].aff='9';
    bouton[3].aff='+';
    bouton[4].aff='4';
    bouton[5].aff='5';
    bouton[6].aff='6';
    bouton[7].aff='-';
    bouton[8].aff='1';
    bouton[9].aff='2';
    bouton[10].aff='3';
    bouton[11].aff='*';
    bouton[12].aff='.';
    bouton[13].aff='0';
    bouton[14].aff='=';
    bouton[15].aff='/';
 
    bouton[0].what_do=Touche::t0(int nb);<==== Erreur a la compil
    bouton[1].what_do=Touche::t1(int);<==== Erreur a la compil
    bouton[2].what_do=t2(int result);<==== Erreur a la compil
    bouton[3].what_do=t3(int result);<==== Erreur a la compil
    bouton[4].what_do=t4(int result);<==== Erreur a la compil
    bouton[5].what_do=t5(int result);<==== Erreur a la compil
    bouton[6].what_do=t6(int result);<==== Erreur a la compil
    bouton[7].what_do=t7(int result);<==== Erreur a la compil
    bouton[8].what_do=t8(int result);<==== Erreur a la compil
    bouton[9].what_do=t9(int result);<==== Erreur a la compil
    bouton[10].what_do=t10(int result);<==== Erreur a la compil
    bouton[11].what_do=t11(int result);<==== Erreur a la compil
    bouton[12].what_do=t12(int result);<==== Erreur a la compil
    bouton[13].what_do=t13(int result);<==== Erreur a la compil
    bouton[14].what_do=t14(int result);<==== Erreur a la compil
    bouton[15].what_do=t15(int result);<==== Erreur a la compil
 
 
    result[0]=bouton[nb].aff;
    result[1]='\0';
 
    bouton[nb].touche = new QPushButton( result, this, "touche" );
    connect( bouton[nb].touche, SIGNAL(clicked()), qApp, SLOT(bouton[nb].(*what_do)));  
}
 
fichier .h :
 
   class Touche : public QVBox
{
public:
    struct boutons {
            char aff;
            QPushButton *touche;
            void (*what_do)( int );
            };
    struct boutons bouton[16];
    char result[2];    
    Touche( QWidget *parent=0, int nb=0, const char *name=0 );
 
    void t0( int );
    void t1( int );
    void t2( int );
    void t3( int );
    void t4( int );
    void t5( int );
    void t6( int );
    void t7( int );
    void t8( int );
    void t9( int );
    void t10( int );
    void t11( int );
    void t12( int );
    void t13( int );
    void t14( int );
    void t15( int );
};
 
J'espère ke cela est suffisant sinon n hésitez pas a me demander :)
Mci bcp

Reply

Marsh Posté le 21-10-2003 à 21:14:08   

Reply

Marsh Posté le 21-10-2003 à 21:24:36    

g pas envie d'eplucher ton code
ca t'ennuies tant que ca de poster tes erreurs de compil ?

Reply

Marsh Posté le 21-10-2003 à 21:28:14    

mouarf dsl mais j'avais oublié de poster les erreurs exactes :/ encore dsl
 
calculette.cpp: Dans member function « void Touche::t0(int) »:  
calculette.cpp:4: « essai » non déclaré (première utilisation dans cette  
fonction)  
calculette.cpp:4: (Chaque identificateur non déclaré est rapporté seulement  
une seule fois pour la fonction dans laquelle il apparaît.)  
calculette.cpp:3: AVERTISSEMENT: paramètre « int result » inutilisé  
calculette.cpp: Dans constructor « Touche::Touche(QWidget*, int, const char*)  
»:  
calculette.cpp:27: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:28: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:29: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:30: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:31: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:32: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:33: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:34: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:35: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:36: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:37: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:38: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:39: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:40: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:41: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp:42: erreur d'analyse syntaxique avantle jeton « ) »  
calculette.cpp: Dans le membre de la fonction « MyWidget::MyWidget(QWidget*,  
const char*) »:  
calculette.cpp:62: AVERTISSEMENT: variable inutilisée « QLabel*essai »  
 
voila encore dsl

Reply

Marsh Posté le 21-10-2003 à 21:31:25    

eurf c koi le compilo qui te crache des trucs pareils ?
 
enfin bon, suffitde savoir lire :
 

calculette.cpp: Dans member function « void Touche::t0(int) »:  
calculette.cpp:4: «[g] essai » non déclaré [/g](première utilisation dans cette  
fonction)  


 

Citation :

bouton[2].what_do=t2(int result);


c'est pas du C++ ca, c'est du rien du tout :O

Code :
  1. bouton[2].what_do=t2;


ca merdera aussi, mais differement

Reply

Marsh Posté le 21-10-2003 à 21:39:05    


Je programme sous KDevellop et je pense ke c g++ ki compile mais j en suis pas sur et dsl pour mon code mais je debute en c++ et c pas facile :/ j ai mi "bouton[0].what_do=t0;" mais j obtiens une nouvelle erreur :
 
calculette.cpp: Dans constructor « Touche::Touche(QWidget*, int, const char*)  
»:  
calculette.cpp:27: pas de concordance de conversion de fonction « t0 » vers  
le type «void (*)(int)'  
calculette.cpp:3: candidates are: void Touche::t0(int)  
 
Si kk1 avez une idee ? :)
Mci Bcp

Reply

Marsh Posté le 21-10-2003 à 21:41:05    

bon maintenant que ca merde differement, on peut t'expliquer ce qu'on a deja expliquer 12586 fois au cours de ce mois ci :O
 
Pointeur de fonction membre != Pointeur de fonction
 
Donc :
1) soit tu fais ta fonction en fonction pas membre
2) soit tu la passes en static

Reply

Marsh Posté le 21-10-2003 à 21:43:29    


d accord si je comprend bien ce ke tu me dit j ai tout interet de passer ma fonction en static pour pouvoir la laisser dans la classe est ce bien ca ? et si oui c tu ou je pourrais me documenter pour le passage en static plz
 
mci bcp

Reply

Marsh Posté le 21-10-2003 à 21:45:21    

passage en static = mettre "static" devant la declaration de ta fonction devant le .h

Reply

Marsh Posté le 21-10-2003 à 21:49:04    


mci bcp ca marche nickel puis je encore de faire chier une derniere pour ke tu me dise en gros pk faut il mettre static devant la declaration ( k est ce ke cela fait il en gros plz ) ? :)

Reply

Marsh Posté le 21-10-2003 à 21:50:42    

sephirotholsimar a écrit :


mci bcp ca marche nickel puis je encore de faire chier une derniere pour ke tu me dise en gros pk faut il mettre static devant la declaration ( k est ce ke cela fait il en gros plz ) ? :)


 
heuh ben
 
Pointeur de fonction = 4octets (et convention d'appel _cdecl (generalement))
 
Pointeur de fonction membre = 8octets (adresse de fonction + "this" )et convention d'appel thiscall
 
Pointeur de fonction membre static = pointeur de fonction (par contre vu que tu n'asplus le this tu ne peux pas utiliser des vars membres non static)
 
Vala

Reply

Marsh Posté le 21-10-2003 à 21:50:42   

Reply

Marsh Posté le 21-10-2003 à 21:54:41    

mci bcp
c super gentil de m avoir expliker tout ca et desoler de t avoir deranger  
mci bcp :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed