kleines problem mit blöcken



  • 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();
    

  • Mod

    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 aus

    Thx openglfreak


  • Mod

    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


  • Mod

    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!


  • Mod

    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.


Anmelden zum Antworten