"no 'xxx' member function declared" in abgeleiteter Klasse



  • Hi,

    Ich habe eine Klasse "GuiObject" von der diverse andere Klassen erben, in dem Fall jetzt mal "ScrollableListElement". In der Klasse "GuiObject" befindet sich nur eine virtuelle funktion "render_to_screen". Früher sah das so aus:

    virtual void render_to_screen();
    

    die hab ich dann in den anderen klassen implemtiert und alles funktionierte. Jetzt hab ich das so abgeändert:

    virtual void render_to_screen(int pos_x=0, int pos_y=0);
    

    Und jetzt sagt er in jeder Klasse (bzw hier in ScrollableListElement.cpp)

    ScrollableListElement.cpp (18) : error: no 'void ScrollableListElement::render_to_screen(int, int)' member function declared in class 'ScrollableListElement'

    Ich könnt das jetzt überall nochmal extra deklarieren, aber das ist ja nicht sinn der Sache...

    Kompletter Code:

    GuiObject.h

    class GuiObject {
    
    public:
    	virtual void render_to_screen(int pos_x=0, int pos_y=0);
    };
    

    GuiObject.cpp

    #include "GuiObject.h"
    
    void GuiObject::render_to_screen(int pos_x, int pos_y) {
    }
    

    ScrollableListElement.h

    #include "Renderer.h"
    #include "Controllable.h"
    #include "GuiObject.h"
    
    class ScrollableListElement : public Controllable, public GuiObject {
    
    private:
    	std::string title;
    
    	static Image* background_image;
    
    public:
    	ScrollableListElement(std::string t);
    };
    

    ScrollableListElement.cpp

    #include "ScrollableListElement.h"
    
    // [konstruktor]
    
    void ScrollableListElement::render_to_screen(int pos_x, int pos_y)
    {
    	Renderer::blitAlphaImageToScreen(0 ,0 , 236, 35, this->background_image, pos_x, pos_y);
    }
    

    Irgendwie versteh ich das nicht... 😞



  • Schau dir mal deine ScrollableListElement Klasse an,man muss virutelle Methoden in Kind Klassen generell überschreiben.Und in deiner ScrollableListElement Klasse, existiert keine deklaration dieser Methoden.



  • Wo ist denn die Deklaration in ScrollableListElement?



  • Hmja, hab gedacht die müsste man nicht mehr deklaierern weil die schon in der elternklasse deklariert ist. Ok, falsch gedacht. Danke 🙂



  • Firefighter schrieb:

    man muss virutelle Methoden in Kind Klassen generell überschreiben.

    Falsch. Nur pur virtuelle Methoden müssen Überschrieben werden. bei normalen virtuellen Methoden darf die Kindklasse durchaus die Implementierung der Elternklasse übernehmen.



  • @pumuckl: Stimmt habs verwechslet, ich danke dir.


Anmelden zum Antworten