Seltsames Verhalten bei simpler Zuweisung (BCB)



  • PosSeX schrieb:

    [...]
    Die globale Variable ist eine Klasse [...]

    😕 Öhm, ist das jetzt eine Klasse oder eine Variable???
    Weil beides geht glaube ich nicht.



  • na anständiger OOP ist das eine öffentliche Mitgliedsfunktion die den Inhalt einer privaten Variable (hier vom Typ Int) zurückliefert...



  • Naja, ist halt ein Objekt welches global ist.
    Ich weiß, nicht schön und arbeite auch gerade daran das schöner hinzubiegen(Stichwort: Singleton)

    @PuppetMAster2k:
    Soweit bin ich schon, dass ich deinen Vorschlag auch so hinbekommen hätte/habe, wenn es denn funzen würde. 😃

    @FrankHof:
    ich weiß... Klasse kommt nicht von mir 😞 Und drin rumpfuschen will ich vorerst nicht.

    Hofmann_Till schrieb:

    Weil beides geht glaube ich nicht.

    Erläuter mal...vielleicht bringt mich das näher ans Prob.

    Danke

    Es macht im Übrigen keinen Unterschied, ob es ein Objekt irgendeiner Klasse oder eine "Variable" eines Basistypen ist.

    Ich kann es vielleicht noch detaillierter beschreiben:
    Bei versuchter Verwendung der Variablen/des Objektes außerhalb von Klassenfunktionen funktioniert alles reibungslos. Lediglich innerhalb gibt's Probleme. Der Compiler macht keine Zicken(auch keine Warnungen)



  • allein schon dass das compiliert ohne errors und warnings ist komisch...



  • Naja, eine Variable kann keine Klasse sein. Entweder global ist eine Klasse oder eine Variable oder global steckt in einer Klasse.

    Sieht die Klasse so aus???

    class Klasse
    {
    private:
    public:
    int global;
    };
    

    Und du sagst, du kannst von Extern auf die Variable zugreifen, aber nicht, wenn du eine Funktion/Prozedur in der Klasse schreibst?



  • PosSeX schrieb:

    [...]
    Die globale Variable ist eine Klasse [...]

    Wenn die Variable "global" eine Instanz einer Klasse ist, ist es unklar, was der Zuweisungs-Operator überhaupt bewirkt. Etwas mehr Informationen über die betreffende Klasse und die Definition von "global" könnten vielleicht hilfreich sein.



  • Ich zeig's noch mal auf:

    In File1.cpp steht:

    ClassX objX;    //ist in File1.hpp als extern ClassX objX deklariert;
    ...
    
    AndereKlasse::AndereKlasse()
    {
       objX.Attrib1=42;
       ...
    }
    
    ...
    

    in File2.cpp dann:

    #include "File1.hpp"
    ...
    GanzAndereKlasse::GanzAndereKlasse(...)
    {
       int bla=objX.Attrib1;    // und hier kackt er rum (Attrib ist integer)
       ...
    }
    ...
    

    und hier noch mal ClassX.hpp

    class ClassX
    {
       public:
           int Attrib1;
           int Attrib2;
           ...
    };
    

    Kein operator=, oder sonst irgendwelche Sachen innerhalb ClassX



  • HI,
    mach doch objX als public in AndereKlasse und greife dann durch AndereKlasse.objX.Attrib1 darauf zu...

    MfG

    Alexander Sulfrian

    PS: Den FAQ Artikel zu piblic Variablen kennst du schon, oder?



  • Ist ne Möglichkeit, hier allerdings etwas ungünstig.
    Ich benötige die Attrib1 ... AttribN in fast allen anderen Programmteilen(u.a. in Threads).

    AndereKlasse soll aber mit den anderen Teilen nichts zu tun haben(ist ne TForm).

    Ich versuchs gerade mitm Singleton-Pattern...denke/hoffe das haut hin



  • PosSeX schrieb:

    in File2.cpp dann:

    #include "File1.hpp"
    ...
    GanzAndereKlasse::GanzAndereKlasse(...)
    {
       int bla=objX.Attrib1;    // und hier kackt er rum (Attrib ist integer)
       ...
    }
    ...
    

    Muss das da nicht #include "File1.h" heißen???


Anmelden zum Antworten