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