Vererbung macht Probleme
-
So hab ich es vorher auch gemacht, nur da kam der Fehler:
nobject.h:27: Fehler: expected class-name vor "{"
-
mach mal die vererbung public:
class nObject : public nRenderJob {
und mache keinen header mit includes, sondern includiere immer dort, wo du etwas brauchst, genau das, was du benötigst.
virtuel braucht public vererbung.
und dann klamüser alles nochmal genau aus und denke an die forward deklarationen, so du sie brauchst.
-
public hab ich vergessen zu schreiben, aber gleicher Fehler.
Dann werd ich mal alles umschreiben (die Header).
-
Ok, jetzt hab ich überall nur die benötigten Header eingetragen.
Jetzt folgendes:nrenderjob.cpp:13: undefined reference to 'vtable for nRenderJob' (in der Zeile vom Konstruktor)
nrenderjob.cpp:17: undefined reference to 'vtable for nRenderJob' (in der Zeile vom Destruktor)
nobject.cpp:14: undefined reference to 'typeinfo for nRenderJob' (in der Zeile vom Konstruktor)Im ganzen Projekt gibt es jetzt keine Forwarddeklarationen mehr, nur eingebundene Header.
-
Müsste die virtuelle Funktion in der Basisklasse nicht auch
gleich Null gesetzt werden?!virtual void RenderInstructions() = 0;
-
Wow, das wars.
Das man virtual Funktionen 0 setzen muss hab ich aber bisher in keinem Tutorial gefunden, auch nicht in meinem Buch. Danke, an Alle!
-
Denk aber daran, dass du durch das "0-Setzten" eine abstrakte Klasse hast. Dadurch kannst du keine Instanz dieser Klasse erzeugen und MUSST von ihr erben.
-
Das ist in dem Fall kein Problem, da man mit der nRenderJob Klasse allein nichts machen kann (sie beeinhaltet nur ctor, dtor und die eine Methode).
Aber für andere Projekte wäre es interessant, wie man es lösen könnte, ohne das 0-setzen.
Mfg,
Alex
-
wenn man aber nur eine polymorphe klasse hat, also nur mit einer virtual methode, dann kann man doch trotzdem von der klasse ein objekt erstellen, oder?
-
Gast996611 schrieb:
Das ist in dem Fall kein Problem, da man mit der nRenderJob Klasse allein nichts machen kann (sie beeinhaltet nur ctor, dtor und die eine Methode).
Aber für andere Projekte wäre es interessant, wie man es lösen könnte, ohne das 0-setzen.
Mfg,
AlexEs sollte normal auch ohne abstrakte Basisklasse gehen.
Hast du vielleicht keine Default-Implemention der virtuellen Methode der Basisklasse definiert?
-
leech schrieb:
wenn man aber nur eine polymorphe klasse hat, also nur mit einer virtual methode, dann kann man doch trotzdem von der klasse ein objekt erstellen, oder?
Ja
-
Nein, eine Defaultimplemenatation hab ich nicht.
Btw. eine Frage hätt ich noch kurz: Wie komm ich von einem Bereich von 0 - 255 auf einen Bereich von 0.0 bis 1.0? (RGB in OpenGL Farben umrechnen)
-
Gast996611 schrieb:
Nein, eine Defaultimplemenatation hab ich nicht.
Dann definiere mal eine. Es reicht auch bloß
{}
.
Jedoch wäre dann, wie du schon gemacht hast, eine abstrakte Klasse besser.zur 2.Frage: http://www.c-plusplus.net/forum/viewtopic.php?t=56693&highlight=opengl+rgb
-
Danke!
-
Gast996611 schrieb:
Nein, eine Defaultimplemenatation hab ich nicht.
Btw. eine Frage hätt ich noch kurz: Wie komm ich von einem Bereich von 0 - 255 auf einen Bereich von 0.0 bis 1.0? (RGB in OpenGL Farben umrechnen)
1.0/255*farbwert