kleines problem mit blöcken
-
Ich werds mal ausprobieren hab im moment pc verbot bin 13 und hab... ein bisschen mist gebaut
bin mit tablet pc im forum. Ich hasse die android tastaturThx openglfreak
-
Ich habe ein problem mit nem struct von dem mehrere structs abgeleitet werden.
Davon erstelle ich mehrere instanzen und speichere sie in einem array.
wie überschreibe ich eine methode der superklasse und rufe diese NACH CAST ZU SUPERKLASSE auf?
z.b.array[0] = new Superklasse(); array[0].methode(); //gibt 0 aus array[0] = new Subklasse(); array[0].methode(); //gibt 1 aus
-
In C++ heist das Schluesselwort
virtual
dafuer.
-
knivil schrieb:
In C++ heist das Schluesselwort
virtual
dafuer.Kannst du mir ein kurzes beispiel zeigen?
Thx openglfreak
-
-
openglfreak schrieb:
hab im moment pc verbot bin 13 und hab... ein bisschen mist gebaut
ich bin so froh dass ich keine kinder habe
-
danke für die Antworten darf wieder an den PC
Thx openglfreak
-
das mit virtual funktioniert nicht
-
Der Code soll so sein:
Block blocks[1024]; // ... blocks[i] = new Holz(); // ... blocks[i].tuetwas(); //soll in jeder unterklasse anders sein
-
openglfreak schrieb:
Block blocks[1024]; // ... blocks[i] = new Holz();
das duerfte doch nichtmal kompilieren.
-
Vielleicht so:
vector<Block*> bloecke; for(){ Block *blockX = new Block(); bloecke.push_back(blockX); } bloeke[xx]->tuwas();
Nur so als Anhaltspunkt, ob es geht gerade keine Ahnung
MfG
-
Mit pointer array ging das auch nich
Bin ratlos
Thx openglfreak
-
Ich bin mir nicht sicher ob das ein Grund sein kann, aber da Block eine eigene Klasse ist, kann es sein das der []-Operator nicht definiert ist?
Also hast du denn es mal mit der von mir genannten Möglichkeit probiert also mit Vector ?
MfG
-
Wenn man Google benutzt findet man übriges auch was dazu hier das habe ich z.B. gefunden:
#include <list> Function(){ std::list<object> objects; for(...){ object *newobject; newobject = New object(); objects.push_back(*newobject); } //Zugriff objects.at(0)->foo();
-
openglfreak schrieb:
Mit pointer array ging das auch nich
Bin ratlos
Thx openglfreak
du hast in der klasse "block" die funktion nicht virtual gemacht.
-
Ich habe die methode virtual gemacht
Liegts villeicht daran, das ich die in einer .h datei gemacht und den code in eine .cpp datei geschrieben habe?
ich probier mal die anderen listen ausThx openglfreak
-
poste entsprechende teile von Block und Holz
-
Block.h: class Block { public: virtual void tuetwas(); } Block.cpp: void Block::tuetwas() { ... } Holz.h class Holz : public Block { public: void tuetwas() { ... } }
Sry für fehler mach das aus dem kopf
Thx openglfreak
-
wenn du den fehler finden willst, waere das orginal schon wichtig, kann sein dass du deinen funktionsnamen oder parametertyp leicht unterschiedlich geschrieben hast und schwubs laeuft es nicht.
es bietet sich an die funktion in block pure virtual zu machen indem du es so schreibst:
virtual void tuetwas()=0;
das bedeutet, du hast keine implementierung davon, nur eine deklaration, auf diese weise MUSS die methode der abgeleitetten klasse aufgerufen werden oder wenigstens ein kompilierfehler wenn etwas nicht stimmt.
-
Dann kommt der Kompilierfehler:
invalid abstract type 'Block' for 'array'