Re: sigc::ptr_fun() compiler error
- From: Bob Caryl <bob fis-cal com>
- To: rchilds vctlabs com
- Cc: gtkmm-list gnome org
- Subject: Re: sigc::ptr_fun() compiler error
- Date: Fri, 01 Jul 2005 10:49:56 -0500
Ron Lockwood-Childs wrote:
Hello,
I get an error when trying to compile the following code:
test.h
------
#include <libglademm/xml.h>
#include <gtkmm>
#include <iostream>
class Test
{
Glib::RefPtr<Gnome::Glade::Xml> refXml;
Gtk::Window *pMWindow;
void on_quit_activate() { if (pMWindow) pMWindow->hide(); }
public:
Test( int argc, char **argv, char *glade_path );
};
test.cc
-------
#include <libglademm/xml.h>
#include <gtkmm>
#include <iostream>
#include "test.h"
Test::Test( int argc, char **argv, char *glade_path )
{
try
{
refXml = Gnome::Glade::Xml::create( glade_path );
}
catch(const Gnome::Glade::XmlError& ex)
{
std::cerr << ex.what() << std::endl;
exit( 1 );
}
refXml->get_widget("mainwindow", pMWindow);
if (pMWindow)
{
Gtk::MenuItem* pMenuItem = 0;
refXml->get_widget("menu_file_quit", pMenuItem);
if(pMenuItem)
{
pMenuItem->signal_activate().connect(
sigc::ptr_fun( &Test::on_quit_activate ) );
}
}
}
int main( argc, argv )
{
Test testDialog = new Test( argc, argv, "test.glade" );
return 0;
}
---------
(if I've made copy-paste errors, FWIW the actual code doesn't get
syntax errors..)
Finally, when I attempt compilation, this is what I get:
$ g++ test.cc -o test `pkg-config gtkmm-2.4 --cflags --libs`
-lglademm-2.4
test.cc: In constructor `Test::Test(int, char**, char*)':
test.cc: error: no matching function for call to `ptr_fun(void
(Test::*)())'
This was taken from the tutorial, except that now I'm attempting to
put the UI code into its own class. It gives me no hint on why it
can't find the function. If I do anything to the function pointer,
such as:
sigc::ptr_fun(&(Test::on_quit_activate))
or
sigc::ptr_fun(&(this->on_quit_activate))
I get the same error, with another complaint regarding ANSI C++ and
pointers to non-static member functions. This signal handler must be
a member function, since it accesses private data.
Anyone seen this or similar errors & can offer help? I'd appreciate it.
--
Ron Lockwood-Childs
_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list
Your compiler is unhappy because you are trying to pass a class member
function to sigc::ptr_fun when it is expecting a NON class member
function. Try using sigc::mem_fun with the following syntax to pass
your member function:
pMenuItem->signal_activate().connect( sigc::mem_fun( *this,
&Test::on_quit_activate ) );
I hope this helps you out.
Bob Caryl
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]