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


Log in to reply