"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.