include fehler



  • Hallo,

    ich bins schon wieder ;). Ich habe hier glaube ich einen include Fehler, sehe aber die Lösung nicht.

    Datei ast.h

    #ifndef _AST_H
    #define	_AST_H
    
    typedef struct {
    
        int aggnum;
        int varid;
    
    } AggFunction;
    
    #include "astselect.h"
    #include <stdint.h>
    
    namespace AST {
    
    class AST {
    
    public:
    
        AST();
    
        ~AST();
    
        virtual void createASTfromBitStream(uint8_t* data);
    
        ASTSelect getSelectClause();
    private:
    }; //End class
    } //End namespace
    #endif	/* _AST_H */
    

    Datei astselect.h

    #ifndef _ASTSELECT_H
    #define	_ASTSELECT_H
    
    #include <stdlib.h>
    #include "ast.h"
    
    namespace AST{
    
    class ASTSelect {
    
    public:
    
        ASTSelect(int numVar, int numAgg);
    
        ~ASTSelect();
    
        virtual void addSelectVar(int var);
    
        virtual void addSelectAgg(int aggNum, int var);
    
        virtual void addSelectAgg(AggFunction agg);
    
        virtual void addSelectId();
    
        virtual void addSelectTs();
    
        virtual void addSelectGeo();
    
        virtual int getSelectVarCnt();
    
        virtual int getSelectAggCnt();
    
        virtual int getSelectVar(int i);
    
        virtual AggFunction getSelectAgg(int i);
    
        virtual bool selectId();
    
        virtual bool selectTs();
    
        virtual bool selectGeo();
    
    private:
    
        int* varList;
        AggFunction* aggList;
    
        int varIndex;
        int aggIndex;
    
        bool selectIdFlag;
        bool selectTsFlag;
        bool selectGeoFlag;
    
    };//End class ASTSelect
    
    }//End namespace AST
    
    #endif	/* _ASTSELECT_H */
    

    Der Fehler bezieht sich auf die erste Datei:

    In file included from source/ast/astselect.h:13,
                     from source/ast/astselect.cpp:9:
    source/ast/ast.h:38: Fehler: »ASTSelect« bezeichnet keinen Typ
    

    Was ist falsch???

    uwe



  • Ich glaube, das gegenseitige Including der Header macht hier Ärger. Versuche Vorwärtsdeklarationen zu benutzen und/oder die Abhängigkeiten zu vermindern. Eventuell braucht astselect.h ast.h nicht direkt? Zeit für ein wenig Refaktorisierung... 😉



  • Hallo zusammen,

    ich habe das Design geändert 😉 Eine Frage habe ich noch. Ich habe einen Namespace AST und eine Klasse AST(ist sozusagen die Hauptklasse innerhalb des Namespaces). Nun mault er bei der Definition des Konstruktors AST::AST(), dass dieser nicht eindeutig ist:

    source/ast/ast.cpp:12: Fehler: Referenz auf »AST« ist mehrdeutig
    source/ast/astselect.h:14: Fehler: candidates are: namespace AST { }
    source/ast/ast.h:22: Fehler:                 class AST::AST
    

    Kann man dies beheben, oder muß ich die Klasse umbennen?

    uwe



  • Geht es mit

    AST::AST::AST()
    {}
    

    ?
    Ansonsten würde ich sowas echt vermeiden. Schreib doch einfach Ast..
    rya.



  • hi,

    ich nenne den namespace anders, ist wohl das einfachste.

    danke. uwe


Anmelden zum Antworten