invalid use of »void«



  • Hi,

    habe en problem mit einem signal.

    void ExampleWindow::on_button_add()
    {
    	Gtk::Entry* entry = new Gtk::Entry;
    
    	entry->on_activate().connect(sigc::mem_fun(*this, &ExampleWindow::on_qNameEntry_enter));
    	qNameEntryList.push_back(entry);
    }
    

    hier gibt der Compiler folgenden Fehler:
    /usr/include/gtkmm-2.4/gtkmm/entry.h: In member function »virtual void ExampleWindow::on_button_add()«:
    /usr/include/gtkmm-2.4/gtkmm/entry.h:120: Fehler: »virtual void Gtk::Entry::on_activate()« ist geschützt
    ../src/examplewindow.cc:73: Fehler: in diesem Zusammenhang
    ../src/examplewindow.cc:73: Fehler: invalid use of »void«

    Wie kann ich in einem signal ein neues signal vergeben?

    mfg Kersten



  • Ohne in die Doku zu schauen würde ich sagen, dass es

    entry->signal_activate()
    

    heißen muss.

    on_activate()
    

    ist eine virtuelle Methode, die beim Ableiten überladen werden kann.



  • Oh, na dann hab ich wohl zu schnell enter gedrückt bei meiner code completion. Sorry. Das man sowas dann abe rauch immer übersieht....

    Naja, den Fehler gibts nicht mehr, dafür nen anderen:

    ../src/examplewindow.cc: In member function »virtual void ExampleWindow::on_button_add()«:
    ../src/examplewindow.cc:73: Fehler: keine passende Funktion für Aufruf von »ptr_fun(void (ExampleWindow::*)())«
    

    Leider verstehe ich dieses ganze gtkmm Krams noch net so gut, daher meine vielen Fragen. Hier mal der Code:

    ExampleWindow::ExampleWindow(
      BaseObjectType* base_object,
      const Glib::RefPtr<Gnome::Glade::Xml>& glade_xml)
      : Gtk::Window(base_object)
    {
    	number = 0;
    
    	glade_xml->get_widget("toolbutton1", button_add);
    	glade_xml->get_widget("treeview1", tv);
    	glade_xml->get_widget("fixed2", fx);
    	//glade_xml->get_widget("frame1", frame1);
    	//glade_xml->get_widget("qName", qName);
    
    	nb.set_show_tabs(false);
    
    	fx->add(nb);
    	fx->show_all_children();
    
    	m_refTreeModel = Gtk::TreeStore::create(m_Columns);
    	tv->set_model(m_refTreeModel);
    
    	//All the items to be reordered with drag-and-drop:
    	//tv->set_reorderable();
    
    	//Add the TreeView's view columns:
    	tv->append_column("Qid", m_Columns.m_col_id);
    	tv->append_column("Name", m_Columns.m_col_name);
    
    	tv->signal_row_activated().connect(sigc::mem_fun(*this,
                  &ExampleWindow::on_treeview_row_activated) );
    
    	button_add->signal_clicked().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_add));
    	//qName->signal_activate().connect(sigc::mem_fun(*this, &ExampleWindow::on_qname_key_pressed));
    }
    
    ExampleWindow::~ExampleWindow()
    {
    }
    
    void ExampleWindow::on_button_add()
    {
    	Gtk::TreeModel::Row row = *(m_refTreeModel->append());
    	Glib::ustring strText = row[m_Columns.m_col_name];
    
    	number += 1;
    
    	row[m_Columns.m_col_id] = number;
    	row[m_Columns.m_col_name] = "";
    
    	Gtk::Entry* entry = new Gtk::Entry;
    
    	entry->signal_activate().connect(sigc::ptr_fun(&ExampleWindow::on_qNameEntry_enter));
    	qNameEntryList.push_back(entry);
    
    	nb.pages().push_back(
        	Gtk::Notebook_Helpers::TabElem(*qNameEntryList[number - 1], tostring(number)));
    
    	nb.set_current_page(number - 1);
    	nb.show_all_children();
    }
    
    void ExampleWindow::on_treeview_row_activated(const Gtk::TreeModel::Path& path,
    		Gtk::TreeViewColumn* /* column */)
    {
    	Gtk::TreeModel::iterator iter = m_refTreeModel->get_iter(path);
    	if(iter) {
    		Gtk::TreeModel::Row row = *iter;
    		nb.set_current_page(row[m_Columns.m_col_id] - 1);
    
    		Glib::ustring start = "qname_entry_";
    		qname_entry = start + tostring(row[m_Columns.m_col_id] - 1);
    
    		// qNameEntryList[row[m_Columns.m_col_id] - 1]->set_text(qname_entry);
    	}
    }
    
    void ExampleWindow::on_qNameEntry_enter()
    {
    	/*Gtk::TreeModel::iterator iter = m_refTreeModel->get_iter(path);
    	if(iter) 
    		Gtk::TreeModel::Row row = *iter;
    
    		row[m_Columns.m_col_name] = qNameEntryList[row[m_Columns.m_col_id] - 1]->get_text();
    	//}*/
    }
    

    Wobei Zeile 73 das hier ist:

    entry->signal_activate().connect(sigc::ptr_fun(&ExampleWindow::on_qNameEntry_enter));
    	qNameEntryList.push_back(entry);
    


  • hm, habs nochmal geändert auf mem_fun und nun gehts. Aber jetzt auch schon wieder zu einem anderen Problem. Wieso geht das hier:

    virtual void on_treeview_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
    
    ....
    
    void ExampleWindow::on_treeview_row_activated(const Gtk::TreeModel::Path& path,
    		Gtk::TreeViewColumn* /* column */)
    

    Und das hier nicht:

    virtual void on_qNameEntry_enter(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
    
    ...
    
    void ExampleWindow::on_qNameEntry_enter(const Gtk::TreeModel::Path& path,
    		Gtk::TreeViewColumn* /* column */)
    

    Upps, hier noch die compiler Meldung:

    /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h: In member function »typename sigc::adaptor_functor<T_functor>::result_type sigc::adaptor_functor<T_functor>::operator()() const [with T_functor = sigc::bound_mem_functor2<void, ExampleWindow, const Gtk::TreePath&, Gtk::TreeViewColumn*>]«:
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:103:   instantiated from »static T_return sigc::internal::slot_call0<T_functor, T_return>::call_it(sigc::internal::slot_rep*) [with T_functor = sigc::bound_mem_functor2<void, ExampleWindow, const Gtk::TreePath&, Gtk::TreeViewColumn*>, T_return = void]«
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:110:   instantiated from »static void* (* sigc::internal::slot_call0<T_functor, T_return>::address())(void*) [with T_functor = sigc::bound_mem_functor2<void, ExampleWindow, const Gtk::TreePath&, Gtk::TreeViewColumn*>, T_return = void]«
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:454:   instantiated from »sigc::slot0<T_return>::slot0(const T_functor&) [with T_functor = sigc::bound_mem_functor2<void, ExampleWindow, const Gtk::TreePath&, Gtk::TreeViewColumn*>, T_return = void]«
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:1130:   instantiated from »sigc::slot<T_return, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [with T_functor = sigc::bound_mem_functor2<void, ExampleWindow, const Gtk::TreePath&, Gtk::TreeViewColumn*>, T_return = void]«
    ../src/examplewindow.cc:73:   instantiated from here
    /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251: Fehler: keine Übereinstimmung für Aufruf von »(sigc::bound_mem_functor2<void, ExampleWindow, const Gtk::TreePath&, Gtk::TreeViewColumn*>) ()«
    /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:1916: Anmerkung: Kandidaten sind: T_return sigc::bound_mem_functor2<T_return, T_obj, T_arg1, T_arg2>::operator()(typename sigc::type_trait<T_arg3>::take, typename sigc::type_trait<T_arg4>::take) const [with T_return = void, T_obj = ExampleWindow, T_arg1 = const Gtk::TreePath&, T_arg2 = Gtk::TreeViewColumn*]
    /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251: Fehler: Return-Anweisung mit Wert in »void« zurückgebender Funktion
    make: *** [src/examplewindow.o] Fehler 1
    

Anmelden zum Antworten