Classe global erreichbar machen...



  • Hallo

    Habe folgende Problem:

    Updatercfg_Variables.h

    ---
    class Class_Updatercfg_Variables{
    private:
    public:
    AnsiString Filename;
    AnsiString ClientName;
    AnsiString AppName;
    AnsiString Homepage;
    AnsiString Config_Link;
    AnsiString Patch_List;
    int Dyndns;
    AnsiString IpResolve;
    AnsiString Play;
    };

    extern Class_Updatercfg_Variables *Updatercfg;
    #endif

    ---

    Im Unit1.cpp steht dann #include "Updatercfg_Variables.h" und ich kann diese class benutzen. Will sie aber auch in unit2.cpp nutzen und alles geht in die hose ... wie soll ich es anstellen... 😡



  • Dreamgazer schrieb:

    <snip> Im Unit1.cpp steht dann #include "Updatercfg_Variables.h" und ich kann diese class benutzen. Will sie aber auch in unit2.cpp nutzen und alles geht in die hose ... wie soll ich es anstellen... 😡

    indem du auch in Unit2.cpp schreibst:

    #include "Updatercfg_Variables.h"
    

    Gruß Burkhard

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • hier wäre die Scott Meyers Klasse nützlich.
    Auf diese Art könnte auch ein Doc/View Modell realisiert werden.

    Beispiel:

    //Scott Meyers Klasse
    
    class CAppDoc
    {
        private:
    
             // Standard- und Copykonstruktor sind private.
            // Nur Methoden dieser Klasse können auf sie zugreifen.
            CAppDoc(){};
            CAppDoc(const CAppDoc&);
    
            // Es gibt nur eine Instanz. Jede Zuweisung wäre eine Selbstzuweisung.
            // Da Selbstzuweisungen selten Sinn machen, ist der op= privat
            CAppDoc& operator=(const CAppDoc&);
            public:
            // Diese statische Methode erzeugt die einzige Instanz.
            // Nur über diese Methode erhalten Anwender den Zugriff auf
            // die Instanz.
            static CAppDoc& GetInstanz()
            {
            // Die Instanz wird erst beim ersten Aufruf erzeugt.
            // Endet das Programm, wird Instanz vernichtet.
            static CAppDoc Instanz;
            return Instanz;
            }
    
            //Benutzer Implementierungen
            public:
    
    };
    
    //GlobalInstanz der Dokumenten Klassen
    CAppDoc &Doc=CAppDoc::GetInstanz();
    

    epidemic
    epidemic



  • Dreamgazer,

    Dreamgazer schrieb:

    Will sie aber auch in unit2.cpp nutzen und alles geht in die hose

    "geht in die hose"? Eine aussagekräftige Fehlermeldung hilft dem geneigten Leser, Dein Problem zu verstehen.
    Ich vermute mal, Du willst nicht nur die Klasse, sondern speziell auch den globalen Zeiger"Updatercfg" auf eine Instanz dieser Klasse in unit2.cpp verwenden.

    //unit2.cpp
    #include "Updatercfg_Variables.h"
    extern Class_Updatercfg_Variables *Updatercfg;
    


  • Tja vorhin war ich recht fertig deswegen so umvollständig geschrieben sass an dem problem mehrere stunden. Und heute immer noch...

    Gewollt war sich selbs inizierende klasse:

    Updatercfg_Variables.h

    class Class_Updatercfg_Variables{
     private:
     public:
      AnsiString  Filename;
      AnsiString  ClientName;
      AnsiString  AppName;
      AnsiString  Homepage;
      AnsiString  Config_Link;
      AnsiString  Patch_List;
      int         Dyndns;
      AnsiString  IpResolve;
      AnsiString  Play;
    };
    Class_Updatercfg_Variables *Updatercfg;
    #endif
    

    Wenn ich das mache wird die classe initialisiert. Heisst Unit1.cpp und Unit2.cpp mit #include Updatercfg_Variables.h habe sie dann 2x Updatercfg classen.

    ---

    Mache ich sowas dagegen:

    Updatercfg_Variables.h

    class Class_Updatercfg_Variables{
     private:
     public:
      AnsiString  Filename;
      AnsiString  ClientName;
      AnsiString  AppName;
      AnsiString  Homepage;
      AnsiString  Config_Link;
      AnsiString  Patch_List;
      int         Dyndns;
      AnsiString  IpResolve;
      AnsiString  Play;
    };
    extern Class_Updatercfg_Variables *Updatercfg;
    #endif
    

    Nun muss classe muss initialisiert werden (unit1.cpp):

    Class_Updatercfg_Variables *Updatercfg ;
    Updatercfg = new Class_Updatercfg_Variables;
    

    Mach ich das in Unit1.cpp weiss Unit2.cpp (ein Thread) nichts davon und meine (erbärmlichen) es doch irgendwie hinzubiegen scheitern.

    Naja die FRAGE IST wie bringe ich es fertig daten global sichbar zu machen. Habe auch die basics verstanden warum das nicht klappt nur was muss ich machen damit es halt geht 😕 Oder wer zeigt mir einen einfachen weg es anders zu tun?

    1000 Dank
    Dreamgazer



  • Hallo,
    eine mögliche Lösung:

    - Schreib in Updatercfg_Variables.cpp folgendes, aber außerhalb einer Funktion:

    Class_Updatercfg_Variables *Updatercfg=0;
    

    Nun schreibst an die Stelle, wo du das Klassenobjekt erzeugen willst (sowohl in Unit1.cpp als auch Unit2.cpp), folgendes;

    if (!Updatercfg)
    {
        Updatercfg = new Class_Updatercfg_Variables;
    }
    

    Sowie ich das aber sehe, ist das keine von der VCL abgeleitete Klasse, dann kannst du das Klassenobjekt auch statisch erzeugen, indem du in Updatercfg_Variables.cpp das hinschreibst:

    Class_Updatercfg_Variables Updatercfg;
    

    Vor allen, bei dieser Variante mußt du dich nicht um die Freigabe mehr kümmern, da der Compiler das für dich übernimmt.

    Gruß Burkhatd


Anmelden zum Antworten