gtkmm, undefined reference to `MeinWidget::~MeinWidget()'



  • Hi!

    Ich beschäftige mich jetzt schon seit einiger Zeit mit gtkmm und der Dokumentation auf der Webseite. Nun habe ich ein kleines Programm geschrieben welches auf Knopfdruck eine Bilddatei in ein Gtk::Image lädt, welches in einer Scrollbox ist. Es klappt. Nun wollte ich die Scrollbox und das Image zu einem Widget vereinen, also habe ich mein eigenes Widget von Gtk::ScrollBox abgeleitet. Wenn ich dieses Widget versuche in meinem Fenster zu erzeugen, gibt es mehrere identische Fehlermeldungen:

    helloworld.cc:11: undefined reference to `ImageContainer::ImageContainer()'
    [...]
    

    und später wenn der Destruktor aufgerufen wird:

    helloworld.cc:22: undefined reference to `ImageContainer::~ImageContainer()'
    

    dabei habe ich diese beiden Funktionen in meinem Widget definiert und die Headerdatei korrekt in mein Programm eingebunden. gtkmm-Programme laufen bei mir normalerweise problemlos.
    imagecontainer.h

    #ifndef IMAGECONTAINER_H
    #define IMAGECONTAINER_H
    
    #include <gtkmm/scrolledwindow.h>
    #include <gtkmm/image.h>
    #include <gdkmm/pixbuf.h>
    #include <glibmm/ustring.h>
    #include <iostream>
    
    class ImageContainer: public Gtk::ScrolledWindow
    {
    public:
    	ImageContainer();
    	virtual ~ImageContainer();
    
    	void SetNewPicture(Glib::ustring iFP);
    
    	Glib::ustring getPictureFilePath()const;
    protected:
    	Gtk::Image MainPicture;
    	Glib::ustring PictureFilePath;
    
    	virtual void on_size_request(Gtk::Requisition* requisition);
    	virtual void on_size_allocate(Gtk::Allocation& allocation);
    	virtual void forall_vfunc(gboolean include_internals, GtkCallback callback, gpointer callback_data);
    	virtual void on_add(Gtk::Widget* child){}
    	virtual void on_remove(Gtk::Widget* child){}
    };
    #endif
    

    imagecontainer.cc

    #include "imagecontainer.h"
    
    ImageContainer::ImageContainer():
    Gtk::ScrolledWindow::ScrolledWindow(),
    PictureFilePath("")
    {
    	add(MainPicture);
    	MainPicture.show();
    }
    
    ImageContainer::~ImageContainer()
    {
    	Gtk::ScrolledWindow::~ScrolledWindow();
    }
    
    void ImageContainer::SetNewPicture(Glib::ustring itsFilePath)
    {
    	Glib::RefPtr<Gdk::Pixbuf> thePixbuf = Gdk::Pixbuf::create_from_file(itsFilePath);
    	std::cout << "Load: " << itsFilePath << "\n";
    	MainPicture.set(thePixbuf);
    }
    
    Glib::ustring ImageContainer::getPictureFilePath()const
    {
    	return PictureFilePath;
    }
    
    void ImageContainer::on_size_request(Gtk::Requisition* requisition)
    {
    
      //Discover the total amount of minimum space needed by this container widget,
      //by examining its child widgets.
    
    	Gtk::Requisition * MainPictureDimensions = Gtk::Requisition(0, 0);
    	MainPictureDimensions = MainPicture->size_request();
    
      //Request the width for this container based on the sizes requested by its
      //child widgets:
    	requisition = &MainPictureDimensions;
    }
    
    void ImageContainer::on_size_allocate(Gtk::Allocation& allocation)
    {
    	set_allocation(allocation);
    }
    
    void ImageContainer::forall_vfunc(gboolean /* include_internals */,
            GtkCallback callback, gpointer callback_data)
    {
    	callback(MainPicture.gobj(), callback_data);
    }
    

    Ich bin schon das Beispiel in der gtkmm-Dokumentation für den CustomContainer durchgegangen und habe teils die Funktionen implementiert. Der Fehler bleibt aber immer der gleiche. Ich vermute mal das liegt an irgendwelchen Eigenheiten von gtkmm, die mir noch nicht geläufig sind.
    Vielen Dank schonmal,
    -nip-


  • Mod

    Die Fehlermeldung heisst nix anderes, als das er an der Stelle die Sache nicht kennt, bzw. nicht finden kann.
    Überprüf mal, ob die entsprechende Datei in deiner IDE ins Projekt eingebunden ist.
    Falls nicht, erklärt dies die Fehlermeldung...

    phlox


Anmelden zum Antworten