kleines problem mit blöcken
-
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'
-
*facepalm*
Um Polymorphie zu nutzen, musst du natürlich Zeiger auf Block übergeben, sonst klappt das alles nicht!
-
openglfreak schrieb:
Dann kommt der Kompilierfehler:
invalid abstract type 'Block' for 'array'da bleibe ich bei:
rapso schrieb:
openglfreak schrieb:
Block blocks[1024]; // ... blocks[i] = new Holz();
das duerfte doch nichtmal kompilieren.