public static aus "uebergeordneter" klasse



  • Hi,

    es fällt mir schwer die Frage richtig zu formulieren und es ist dementsprechend schwer etwas über google zu finden.

    Ich habe eine Klasse Application, welche den Pfad der Applikation speichert

    class Application{
    public:
        static string APPLICATION_PATH;
    ..
    };
    

    und ich möchte in einer Klasse, welche teil von Application ist (Komposition) genau diesen Pfad verwenden.

    Wenn ich Application in der untergeordneten Klasse includiere, bekomme ich einen Fehler bei der Application Klasse und wenn ich es nicht includiere, kennt er die Variable nicht.

    also ich will in der anderen Klasse

    Application::APPLICATION_PATH
    

    verwenden.

    Hoffe das ist einigermaßen verständlich 🙂

    gruß



  • Hallo,

    Was für einen Fehler bekommst du denn beim Inkludieren?
    Wie hast du denn Deklaration und Definition deiner Klassen aufgeteilt?



  • z.B.

    #include "ConfigReader.h"
    
    class Application{
    private:
        ConfigReader cfg_reader; // <- eclipse markiert dann hier "ISO C++ forbids declaration of 'ConfigReader' with no type"
    public:
        static string APPLICATION_PATH;
    ..
    [cpp]};
    
    #include "Application.h"
    
    class ConfigReader{
    ...
    };
    
    ConfigReader::readConfig(){
         string path = Application::APPLICATION_PATH;
    ...
    }
    

    der Code is jetzt einfach mal so geschrieben, aber im Prinzip das, was ich machen will.

    Könnte den Pfad auch einfach durchreichen, das werde ich jedenfalls machen, wenn es so nicht geht.



  • Mal eine prinzipielle Anmerkung zu deinem Design: dadurch, daß ConfigReader und Application sich gegenseitig kennen, hast du dir eine zyklische Abhängigkeit eingehandelt. Du könntest zum Beipiel den Pfad in eine ConfigurationsData-klasse auslagern, die sowohl ConfigReader als auch Application anziehen, um diese aufzubrechen.

    Gruß Kimmi


  • Mod

    Du musst einfach nur deine Includes aufräumen und auf die richtige Reihenfolge achten:

    • Die Deklaration von config_reader benötigt keine Deklaration von Application.
    • Die Deklaration von Application benötigt die Deklaration von config_reader.
    • Die Definition von config_reader benötigt die Deklaration von config_reader und von Application.

    Wenn du dies machst, dann klappt alles.



  • SeppJ schrieb:

    Du musst einfach nur deine Includes aufräumen und auf die richtige Reihenfolge achten:

    • Die Deklaration von config_reader benötigt keine Deklaration von Application.
    • Die Deklaration von Application benötigt die Deklaration von config_reader.
    • Die Definition von config_reader benötigt die Deklaration von config_reader und von Application.

    Wenn du dies machst, dann klappt alles.

    Super, danke!

    Hmm das mit der extra Klasse werde ich mir mal überlegen. Finde es aber ganz gut, dass er in der Application Klasse steckt.


Anmelden zum Antworten