[eside-ghost] Error raro al compilar..
Jon Ander Ortiz
jonbaine en gmail.com
Lun Sep 24 10:19:15 CEST 2007
Buenas:
Lo que acabas de mandar esta bien... pero lo de antes no (de echo alfredo te
dice la manera correcta de hacerlo...), me explico...
C++ hace un tratamiento un tanto especial para los punteros a función, que
funcionan de manera bastante diferente a los de C, en caso de que sean
funciones estáticas (o forzando el linkado al modo "C", con la directiva
extern "C" ) o funciones normales asociadas a una clase.
Un puntero a función en C++, define la dirección dentro de un objeto del
tipo al que pertenece, no es un ente "completo", por ello tienes que pasar
el objeto sobre el que vas a ejecutar la acción (el *this que pones en todas
las funciones es pasa eso), y no puedes pasar cuando estas pasando un
puntero a función argumentos de la función que luego quieras ejecutar, ese
es el error que cometes.
En esta línea:
ms_HSspeed.signal_value_changed ().connect(sigc::mem_fun(*this,
&configWindow::setSliderValue(1)));
Estás metiendo valores concretos en el puntero a función: setSliderValue(1)
Ese uno sobra !!! ;), es decir, que estas pasandole los argumentos en el
puntero a función, cosa que no se puede hacer -->
ms_HSspeed.signal_value_changed ().connect(sigc::mem_fun(*this,
&configWindow::setSliderValue)); si el setSliderValue necesita argumentos
echale un vistazo a como gestiona las llamadas en
http://libsigc.sourceforge.net/libsigc2/docs/reference/html/group__mem__fun.html,
que permite pasar punteros a función con varios paramentos, o sino haz lo
que te ha pasado alfredo, haz una función que no tenga parametros y que haga
lo que necesites.
Ala y a compilar!!! XD y ojito con los punteros a funcion en C++ que son un
tanto raritos XD
Un saludete:
Jonan
El día 24/09/07, Iker Perez de Albeniz - Txupete - <txupete en gmail.com>
escribió:
>
> >
> > Se refiere a lo que estás poniendo ahí arriba, que está mal. No puedes
> pasar
> > como parámetro la dirección de una llamada a un método. No sé si tienes
> algún
> > otro error porque hace lustros (bueno, al menos 1) que no hago nada en
> GTK+,
>
> en principio esa es la forma de conectar los botones a una accion...
> lo tengo hecho asi en mas sitios y me funciona perfectamente, por
> ejemplo:
>
>
> m_EVclose.signal_button_press_event().connect(sigc::mem_fun(*this,
> &configWindow::closeWindow));
> m_EVclose.signal_enter_notify_event().connect(sigc::mem_fun(*this,
> &configWindow::closeImageIn));
> m_EVclose.signal_leave_notify_event
> ().connect(sigc::mem_fun(*this,
> &configWindow::closeImageOut));
> ..
> .
> ..
> ..
> .
> bool configWindow::closeWindow(GdkEventButton*)
> {
> hide(); //Closes the main window to stop the Gtk::Main::run().
> return true;
> }
>
> bool configWindow::closeImageIn(GdkEventCrossing*)
> {
> m_Iclose.set("./skin/cerrar-s.png");
> return true;
> }
>
> bool configWindow::closeImageOut(GdkEventCrossing*)
> {
>
> m_Iclose.set("./skin/cerrar.png");
> return true;
> }
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://listas.deusto.es/mailman/private/eside-ghost/attachments/20070924/885cae6f/attachment-0001.htm
Más información sobre la lista de distribución eside-ghost