Seltsames Verhalten bei simpler Zuweisung (BCB)
-
Oh schon jemand der sich meldet...
also:
Welchen Wert haben die beiden Variablen vor(!) und nach der Zuweisung?
global hat den Wert 100;
local hat vor und nach der Zuweisung den Wert 1539460Stimmt der angezeigte Wert und Adresse der globalen Variable ausserhalb und innerhalb Deiner Funktion?
Tja, das ist auch seltsam. Der Wert stimmt überein, aber beim Versuch nur die Adresse zu übergeben zeigt der Debugger ???? an.
Aber warte mal...
Die globale Variable ist eine Klasse und ich will auf Member-Variablen der Klasse zugreifen. Kann das sein, dass ich das dann entsprechend anders anpacken muss???
-
PosSeX schrieb:
Die globale Variable ist eine Klasse und ich will auf Member-Variablen der Klasse zugreifen. Kann das sein, dass ich das dann entsprechend anders anpacken muss???
Ja musst du.
In etwa so
int local = deineKLasse->getGlobal();wobei getGlobal() int zurückgibt.
-
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???