Pb d'espace de nom avec GTKmm-2.4 sous Dev-Cpp

Pb d'espace de nom avec GTKmm-2.4 sous Dev-Cpp - C++ - Programmation

Marsh Posté le 16-12-2006 à 22:09:03    

Bonjour,  
 
Je débute totalement sous GTKmm dont j'ai besoin pour un projet, et je galère pas mal pour des trucs extrêmement simplistes, ai-je l'impression. En gros, pour l'instant, j'essaie de compiler le code suivant :
 
 

Code :
  1. #include <gtkmm/main.h>
  2. #include <gtkmm/window.h>
  3. #include <gtkmm/box.h>
  4. #include <gtkmm/label.h>
  5. #include <gtkmm/entry.h>
  6. #include <gtkmm/button.h>
  7. #include <iostream>
  8. void on_button_clicked() {
  9. std::cout << "Bonjour" << std::endl;
  10. }
  11. int main(int argc, char **argv)
  12. {
  13.     Gtk::Main app(argc, argv);
  14.     Gtk::Window w;
  15.     Gtk::VBox vb;
  16.     w.add(vb);
  17.     Gtk::Label l;
  18.     vb.pack_start(l);
  19.     l.show();
  20.    
  21.     Gtk::Entry e;
  22.     vb.pack_start(e);
  23.     e.show();
  24.    
  25.     Gtk::Button b("Bonjour !" );
  26.     b.signal_clicked().connect(SigC::mem_fun(&on_button_clicked));
  27.     vb.pack_start(b);
  28.     b.show();
  29.     vb.show();
  30.     app.run(w);
  31.     return 0;
  32. }


 
Intérêt du code : génération d'une fenêtre, d'un espace où écrire, d'un bouton permettant d'écrire "bonjour" lorsqu'on clique dessus (hourra !).
 
 
Et ce brave et fidèle Dev-Cpp me retourne la jolie erreur suivante :  
 
30 C:\Dev-Cpp\SansNom1.cpp `mem_fun' is not a member of `SigC'  
 
 
 
NB, j'ai essayé de mettre 'slot' à la place de 'mem_fun', ça n'a rien changé, ça ne semble donc pas être un problème de version.  
 
J'ai mis dans les options du projet le résultat des commandes de config. pkg-config --cflags gtkmm-2.4 et pkg-config --libs gtkmm-2.4. Malgré cela, ça semble être un problème d'include, semble-t-il qu'il ne sache pas où aller chercher le namespace SigC, bien que j'aie installé GTK dans C:\Dev-Cpp.
 
 
Et vu que je touche pas grand chose quand il s'agit de comprendre comment marche la prog. à un peu plus bas niveau, je suis un peu en galère alors que ça doit être je pense tout con ...
 
Bref, merci si qui que ce soit peut m'aider.

Reply

Marsh Posté le 16-12-2006 à 22:09:03   

Reply

Marsh Posté le 17-12-2006 à 09:26:35    

avec :
b.signal_clicked().connect( sigc::mem_fun(*this, &on_button_clicked) );
Ca devrait fonctionner.

Reply

Marsh Posté le 17-12-2006 à 15:08:28    

Je crains que ça ne fonctionne pas davantage malheureusement :(.

Reply

Marsh Posté le 17-12-2006 à 15:57:57    

ArtPlay a écrit :

Je crains que ça ne fonctionne pas davantage malheureusement :(.


 
Oui, désolé, je me suis gouré. Le this n'avait pas de sens ici.

Code :
  1. b.signal_clicked().connect(sigc::ptr_fun(&on_button_clicked));


Ca passe. Attention, sigc en minuscules. Je crois que ça a du changer entre les versions 2.2 et 2.4 de gtkmm, et c'est l'un des rares trucs à retoucher pour passer d'une version à l'autre. Gaffe donc si tu te fais la main sur des vieux sources. Sinon, la doc sur gtkmm.org est bien foutue, même si la partie signaux n'est pas simple.
 
 

Reply

Marsh Posté le 17-12-2006 à 17:51:43    

Aah, très bien, merci beaucoup, ça marche désormais.

Reply

Sujets relatifs:

Leave a Replay

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