Globale Variablen in bcb

ich arbeite mit bcb6, habe 2 forms und beide sollen auf variablen global zugreifen können

struct obj
{
String Name, Typ;
struct coords spnt,vcts[200];
int vctcnt;
} objs[200];

das ist meine variable die ich in beiden haben will, wenn ich sie in einen der Header schreibe, kennen sie zwar beide forms, aber wenn eine werte setzt kennt nur diese die werte, dh es sind quasi 2 unabhängige variablen…
Verzweiflung bahnt sich an da das mein ganzes Projekt aufhält…
danke für hilfe
mfg
lukas

Hallo Lukas

ich arbeite mit bcb6, habe 2 forms und beide sollen auf
variablen global zugreifen können

struct obj
{
String Name, Typ;
struct coords spnt,vcts[200];
int vctcnt;
} objs[200];

das ist meine variable die ich in beiden haben will, wenn ich
sie in einen der Header schreibe, kennen sie zwar beide forms,
aber wenn eine werte setzt kennt nur diese die werte, dh es
sind quasi 2 unabhängige variablen…
Verzweiflung bahnt sich an da das mein ganzes Projekt
aufhält…

Es gibt wohl verschiedene Moeglichkeiten dies zu realisieren. Entweder du benutzt eine globale Variable (Variable, die ausserhalb einer Funktion definiert wird) oder du definierst sie als Klassen-Member einer Klasse die beide Forms kennen und darauf zugreifen koennen.
Note: Imho sollte die Benutzung von globalen Variablen unter C++ vermieden werden wann immer moeglich da erfahrungsgemaess der Code sonst unleserlich wird und schwer zu verwalten ist.

Gruss
Peer

tja danke ich glaube das ist die variante die ich schon versucht habe die und nicht funktioniert hat, wenn du was anderes gemeint hast bitte als beispiel mit meiner varianble
leserlich oder nicht is mir wurscht
lukas

Hi Lukas!

Also eigentlich ist die Sache doch recht einfach (habs probehalber mal eben getestet).
Du mußt deine Variable in einem der beiden Forms deklarieren und definieren. Natürlich musst Du das PUBLIC setzen damit Du auch ne Chance hast vom anderen Form drauf zuzugreifen. Die Formulare sollten gegenseitig included sein (bzw. Das Form das auf die Variable des anderen zugreifen soll muss den Header vom anderen drin haben).
Sagen Wir mal als Beispiel „Form1“ soll auf die Variable „Test“ von „Form2“ zugreifen so geschieht das mit „Form2.Test“.
Evtl. musst Du zusehen dass der Wert aktualisiert wird. Vielleicht liegt Dein Problem darin dass Du zwar alles richtig zuweist, aber die Zuweisung bei einem Event (z.B. ButtunClick) vollzogen wird. Somit kann dann ein Wert den Du gerne geändert hättest auf seinem alten Wert stehen, obwohl Du im anderen Formular den Variablenwert geändert hast. Das ist aber recht leicht in den Griff zu bekomen indem Du eine entsprechende Updatefunktion schreibst die ausgeführt wird wenn der entsprechende Wert verändert wird.

Gruß und weiterhin viel Erfolg!

Hudel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo dergin,

Wie wäre denn das: Du machst bloss eine Instanz der Struktur im Speicher, global oder wo immer, und übergibst dann an beide einen Zeiger (Referenz)…? Das wäre recht einfach, und beide greifen auf dasselbe Objekt zu.

lg
Martin B

Hi Lukas!

Also eigentlich ist die Sache doch recht einfach (habs
probehalber mal eben getestet).
Du mußt deine Variable in einem der beiden Forms deklarieren
und definieren. Natürlich musst Du das PUBLIC setzen damit Du
auch ne Chance hast vom anderen Form drauf zuzugreifen. Die
Formulare sollten gegenseitig included sein (bzw. Das Form das
auf die Variable des anderen zugreifen soll muss den Header
vom anderen drin haben).
Sagen Wir mal als Beispiel „Form1“ soll auf die Variable
„Test“ von „Form2“ zugreifen so geschieht das mit
„Form2.Test“.
Evtl. musst Du zusehen dass der Wert aktualisiert wird.
Vielleicht liegt Dein Problem darin dass Du zwar alles richtig
zuweist, aber die Zuweisung bei einem Event (z.B. ButtunClick)
vollzogen wird. Somit kann dann ein Wert den Du gerne geändert
hättest auf seinem alten Wert stehen, obwohl Du im anderen
Formular den Variablenwert geändert hast. Das ist aber recht
leicht in den Griff zu bekomen indem Du eine entsprechende
Updatefunktion schreibst die ausgeführt wird wenn der
entsprechende Wert verändert wird.

Gruß und weiterhin viel Erfolg!

Hudel

So hab mich beim wem erkundigt und zack zack nach einer min erledigt, du warst ja recht nah an dieser variante dran. Allerdings weiß ich nach wie vor nicht warum ich die variable in beiden forms deklarieren sollte oder gar eine updatefunktion brauche, wie dem auch sei hier mein weg sollte noch jemand das problem haben(im endeffekt ises echt deppeneinfach, nur wemmans nicht weiß…):

simpelste aber unsauberste variante ist die variable im public teil der class einer Form abzulegen, bei mir Form2, und dann den header von form2 bei form1 einzubinden.
Die elegantere variante ist dann die einen neuen header anzulegen, darin eine eigene klasse zu schreiben die die variablen enthält, und diese klasse dann einzubinden und zu initialisieren… falls das noch jemand sucht und genauer braucht hier antworten
mfg
lukas

Hi Lukas!

Noch schnell die Antwort zu deinen noch offenen Fragen:

Allerdings weiß ich nach wie vor nicht warum ich die variable
in beiden forms deklarieren sollte…

Wer sagt das denn?

Du mußt deine Variable in einem der beiden Forms deklarieren
und definieren. ^^^^^

oder gar eine
updatefunktion brauche…

Wenn Du beispielsweise bei einem Buttonclick einen Wert einer Variable in einem Edit-Feld ausgibst wird sich der Wert des Editfeldes nicht von alleine ändern wenn sich der Variablenwert durch eine andere Fuktion ändert.
Solche Kleinigkeiten können schnell mal zu unnötigen Fehler führen, gerade bei Editfeldern. Wenn Du´s nicht brauchst umso besser!

Gruß Marco