On Thursday 21 July 2005 16:22, Andrew Krause wrote: > (Sorry about the no subject topic... in any case...) > > I have a c++ class that contains Gtk+ widgets. They work perfectly > fine except for one thing. When I try to connect a signal to them, > they throw an error saying that the function that it is connected > to should be formatted: "void (*) ()" instead of: "void (MyClass) ()". > > How can I get around this? Is there a way without requiring all > of my functions to receive the class data and not be a part of > the class?
g_signal_connect has its callback (slot) function passed as a C function pointer (cast with G_CALLBACK()). The cludge (which will work with most but not all compilers) is to make your callback a static member function of the class. The correct (standards complying) approach is to make the callback a function outside the class with C linkage (ie declare it extern "C") and make it a friend of the class if it needs access to the class's private or protected members. You will need to pass the class instance to the callback if the callback needs to access non-static data of the class. If so pass the "this" pointer as the last (data) argument to g_signal_connect(), and then cast it back to the correct type in the callback. Chris _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
