Probleme mit Vererbung : base class undefined



  • Hallo . ich bin dabei eine Schachprojekt zu erstellen :
    Dabei habe ich meine KLasse in sepereaten .h und .cpp geakselt. eine "globale" schach.h datei gibt es auch noch. dort sind alle klasse geforwarded. hier mal der code :

    "schach.h"

    // #############################################################################
    
    #include <vector>
    using namespace std;
    
    // #############################################################################
    
    const FeldBreite = 8;
    const FeldHoehe = 8;
    
    // #############################################################################
    
    class cSchachfeld;
    class cSchachfigur;
    
    class cTurm;
    /*class cLaeufer;
    class cSpringer;
    class cKoenig;
    class cDame;
    class cBauer;*/
    
    // #############################################################################
    

    "Schachfigur.h"

    // #############################################################################

    #include "schach.h"

    // #############################################################################

    class cSchachfigur
    {
        public:
    
            cSchachfigur();
    
            int GetX() { return iX; }
            int GetY() { return iY; }
    
            bool SetX(int x);
            bool SetY(int y);
    
            //virtual vector<cSchachfeld*> BewegeSchachfigur();
    
        private:
    
            int iX, iY;        
    };
    

    "turm.h"

    // #############################################################################
    
    #include "schach.h"
    
    // #############################################################################
    
    class cTurm : cSchachfigur
    {
        public:
    
    		cTurm();
    
    		vector<cSchachfeld*> BewegeSchachfigur();      
    };
    

    So wenn ich das komiliere bekomme ich den fehler
    **
    f:\programmierung\schach\turm.h(9) : error C2504: 'cSchachfigur' : base class undefined**

    Kann mir bitte jeman helfen?


  • Mod

    Schreib

    #include "Schachfigur.h"
    

    anstelle von

    #include "schach.h"
    

    in der "turm.h"

    edit: Und eine Erklärung dazu:
    Es gibt einen Unterschied zwischen Deklaration und Definition, wenn du nicht weißt, was das ist, mach dich da mal kundig. In der schach.h steht nur die Deklaration von cSchachfigur. Um von der Klasse erben zu können, braucht der Compiler aber die Definition, die du in Schachfigur.h stehen hast. Deshalb auch die Fehlermeldung, dass die Definition nicht gefunden wurde.



  • Include guards waeren auch nett.



  • dercooleauswandere schrieb:

    "schach.h"

    #include <vector>
    using namespace std;
    

    So eine using-Direktive hat in Header-Dateien nichts zu suchen.
    Include Guards fehlen auch.

    Gruß,
    SP



  • Und die 8 kannste im Code ruhig hardcoded machen. Dürfte letztlich doch einfacher sein(, insbesondere weil Du in Kürze auf einem 12x12-Feld spielen wirst mit einem zwei Felder breiten Todesrand).
    Außerdem public erben, also

    class cTurm : public cSpielstein
    


  • weitere Tips:
    - Lass den Sammel-header ganz weg, der erzeugt nur unnötige Abhängigkeiten beim Compilieren.
    - lass die polnische Notation bei den Klassennamen weg - das c vorn weg ist redundant und liefert keine wirkliche Information.



  • pumuckl schrieb:

    polnische

    hihi. 😉


Anmelden zum Antworten