[gelöst] problem: Basisklasse undefiniert



  • hi,

    bekomme die Fehlermeldung:

    columnobject.h(8) : error C2504: 'DataObject': Basisklasse undefiniert
    

    wenn ich versuche zu kompilieren. ColumnObject sieht wie folgt aus:

    #ifndef COLUMNOBJECT_H
    #define COLUMNOBJECT_H
    
    #include "DataObject.h"
    
    /************* ColumnObject **************/
    class ColumnObject : public DataObject // Basisklasse DataObject wird nicht gefunden!!!
    {
    public: 
    .
    .
    .
    

    Die datei DataObject.h wird offensichtlich gefunden da der kompiler meckert wenn ich die include-direktive umbenenne. irgendjemand eine idee?



  • Der Compiler sieht die Klasse DataObject nicht. Ich nehme an, sie steht in DataObject.h. Da muß der Fehler sein. Im Zweifelsfall die Datei mal herzeigen.



  • vll davor:

    class DataObjekt;

    schreiben



  • Nein, das hilft überhaupt nichts.



  • danke schonmal für die schnelle antwort. hier der code:

    #ifndef DATAOBJECT_H
    #define DATAOBJECT_H
    
    #include "ColumnObject.h"
    
    /****************** DataObject ******************/
    class DataObject{
    public:
    
    	DataObject *L, *R, *U, *D; // pointers on 'neighbors' in the same row/column
        ColumnObject *C;		   // the corresponding column-object 
    
    	DataObject(DataObject l, ColumnObject c);
    };
    
    #endif
    

    kann es sein dass der fehler an dem "gekreutzen" include liegt? wenn ja wie kann ich das umgehen?

    edit:
    ich hätte halt gerne eine columnobject welches von dataobject erbt, wobei aber jedes dataobject auf andere dataobjects und ein columnobject referenziert.



  • Ja, der Fehler liegt an dem gekreuzten include.

    #include "ColumnObject.h" //Woher soll hier der Compiler DataObject schon kennen?
    
    /****************** DataObject ******************/
    class DataObject{
    public:
    
        DataObject *L, *R, *U, *D; // pointers on 'neighbors' in the same row/column
        ColumnObject *C;           // the corresponding column-object 
    
        DataObject(DataObject l, ColumnObject c);
    };
    

    Du musst eine der beiden includes weglassen und stattdessen einfach nur die jeweilige Klasse deklarieren, d.h. mit

    class DataObject;
    

    bzw.

    class ColumnObject;
    

    Felix

    P.S.: Cool, es gibt wieder die Weihnachtssmilies 😃 :xmas1: :xmas2:



  • super, danke!



  • snuuts schrieb:

    kann es sein dass der fehler an dem "gekreutzen" include liegt? wenn ja wie kann ich das umgehen?

    Ja daran liegt es.
    Du kannst in DataObject.h eine Forwarddeklaration verwenden, statt "ColumnObject.h" zu inkludieren. Damit kannst in DataObject.h allerdings nur Zeiger oder Referenzen auf ColumnObject verwenden. Das heißt der Parameter im Konstruktor kann auch nur ein Zeiger (oder eine Referenz) sein:

    #ifndef DATAOBJECT_H
    #define DATAOBJECT_H
    
    class ColumnObject;
    
    /****************** DataObject ******************/
    class DataObject{
    public:
    
    	DataObject *L, *R, *U, *D; // pointers on 'neighbors' in the same row/column
        ColumnObject *C;		   // the corresponding column-object 
    
    	DataObject(DataObject l, ColumnObject* c);
    };
    
    #endif
    

Log in to reply