Murray and I were working on Bakery and Bakery_gnomeui the other day, when we ran into a snag: App_Gtk and App_GnomeUI both use the same code for their menus, but when you virtually derive App_GnomeUI from App_Gtk, we get a bunch of compile errors. Here they are: In file included from App_GnomeUI.cc:19: ../../bakery_gnomeui/App/App_GnomeUI.h:47: no unique final overrider for ` virtual void Glib::ObjectBase::destroy_notify_()' in `Bakery::App_GnomeUI' ../../bakery_gnomeui/App/App_GnomeUI.h:47: no unique final overrider for ` virtual void Glib::ObjectBase::set_manage()' in `Bakery::App_GnomeUI' App_GnomeUI.cc: In constructor `Bakery::App_GnomeUI::App_GnomeUI(const Glib::ustring&, const Glib::ustring&)': App_GnomeUI.cc:33: no matching function for call to `Bakery::App_Gtk::App_Gtk() ' /opt/gnome26/include/bakery-2.4/bakery/App/App_Gtk.h:43: candidates are: Bakery::App_Gtk::App_Gtk(const Bakery::App_Gtk&) /opt/gnome26/include/bakery-2.4/bakery/App/App_Gtk.h:48: Bakery::App_Gtk::App_Gtk(const Glib::ustring&) App_GnomeUI.cc:38: request for member `set_resizable' is ambiguous in multiple inheritance lattice /opt/gnome26/include/gtkmm-2.3/gtkmm/window.h:605: candidates are: void Gtk::Window::set_resizable(bool = true) /opt/gnome26/include/gtkmm-2.3/gtkmm/window.h:605: void Gtk::Window::set_resizable(bool = true) App_GnomeUI.cc:39: request for member `set_default_size' is ambiguous in multiple inheritance lattice /opt/gnome26/include/gtkmm-2.3/gtkmm/window.h:1145: candidates are: void Gtk::Window::set_default_size(int, int) /opt/gnome26/include/gtkmm-2.3/gtkmm/window.h:1145: void Gtk::Window::set_default_size(int, int) App_GnomeUI.cc: In member function `virtual void Bakery::App_GnomeUI::init()': App_GnomeUI.cc:77: request for member `show_all' is ambiguous in multiple inheritance lattice /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:439: candidates are: void Gtk::Widget::show_all() /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:439: void Gtk::Widget::show_all() App_GnomeUI.cc: In member function `virtual void Bakery::App_GnomeUI::init_menus()': App_GnomeUI.cc:110: request for member `add_accel_group' is ambiguous in multiple inheritance lattice /opt/gnome26/include/gtkmm-2.3/gtkmm/window.h:434: candidates are: void Gtk::Window::add_accel_group(const Glib::RefPtr<Gtk::AccelGroup>&) /opt/gnome26/include/gtkmm-2.3/gtkmm/window.h:434: void Gtk::Window::add_accel_group(const Glib::RefPtr<Gtk::AccelGroup>&) App_GnomeUI.cc: In member function `virtual void Bakery::App_GnomeUI::on_menu_help_about()': App_GnomeUI.cc:250: `Gtk::Window' is an ambiguous base of `Bakery::App_GnomeUI' App_GnomeUI.cc:273: `Gtk::Window' is an ambiguous base of `Bakery::App_GnomeUI' App_GnomeUI.cc: In member function `virtual void Bakery::App_GnomeUI::ui_hide()': App_GnomeUI.cc:336: request for member `hide' is ambiguous in multiple inheritance lattice /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:433: candidates are: void Gtk::Widget::hide() /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:433: void Gtk::Widget::hide() App_GnomeUI.cc: In member function `virtual void Bakery::App_GnomeUI::ui_bring_to_front()': App_GnomeUI.cc:341: request for member `get_window' is ambiguous in multiple inheritance lattice /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:1920: candidates are: Glib::RefPtr<const Gdk::Window> Gtk::Widget::get_window() const /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:1919: candidates are: Glib::RefPtr<Gdk::Window> Gtk::Widget::get_window() /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:1920: Glib::RefPtr<const Gdk::Window> Gtk::Widget::get_window() const /opt/gnome26/include/gtkmm-2.3/gtkmm/widget.h:1919: Glib::RefPtr<Gdk::Window> Gtk::Widget::get_window() I'm thinking this is because of virtual inheritance. Here is the inheritance chart for App_Gtk and App_GnomeUI (I put v for not virtual and v for virtual): Bakery::App_GnomeUI Bakery::App_Gtk v n v v / \ / \ Bakery::App Gnome::UI::App Bakery::App Gtk::Window n | Gtk::Window App_GnomeUI and App_Gtk use the same code except for in a few places, so we would like to reduce the code duplication. If I change Gnome::UI::App to virtually inherit from Gtk::Window and App_GnomeUI to virtually inherit from App_Gtk: Bakery::App_GnomeUI v n / \ Bakery::App_Gtk Gnome::UI::App v v \ / Gtk::Window I get this error: In file included from App_GnomeUI.cc:19: ../../bakery_gnomeui/App/App_GnomeUI.h:47: no unique final overrider for ` virtual void Gtk::Container::add(Gtk::Widget&)' in `Bakery::App_GnomeUI' make: *** [App_GnomeUI.lo] Error 1 I'm not sure what that means (since I'm still getting the idea of virtual inheritance down). Any help would be great! -- ====================================================================== Bryan Forbes bryan reigndropsfall net http://www.reigndropsfall.net "It does not take a majority to prevail, but rather an irate, tireless minority keen to set brush fires in people's minds." - Samuel Adams, an architect of the Constitution Key fingerprint = 3D7D B728 713A BB7B B8B1 5B61 3888 17E0 70CA 0F3D
Attachment:
signature.asc
Description: This is a digitally signed message part