Instanz greift auf Instanz zu -> Zugriffsverletzung [gelöst]
-
Den Header von Form1 habe ich in 1.cpp eingebunden... reicht das nicht?
Und include-Guards hab ich standardmäßig drin in allen Headern, ja - aber is ja nicht relevant, weil #include "1.h" in 2.cpp steht.
-
Aber auch in 2.h?
-
Nein das reicht nicht. TForm1 muss auch im header bekannt sein wegen der Deklaration deines Konstruktors. Ich sagte ja schon, eine Forwarddeklaration von TForm1 reicht da.
Include-Guards werden beim BCB sowieso standardmäßig erzeugt.
-
Ok, Danke für den Hinweis. Jetzt kann ich auch problems einen Zeiger vom Typ Form1 als private-Variable in 2.h deklarieren...
Und was soll ich sagen Leute, es wäre zwar viel einfacher gewesen die Forms beim Programmstart zu erzeugen, aber wer wills schon einfach? Es funktioniert jetzt, also special thanks to: Braunstein, Joe_M und witte! Ihr seid Spitze
Schön, dass ihr nicht die Nerven verliert wenn man sich doof anstellt!
Was ich Alles gelernt habe:* ich habe zum 1. Mal einen Konstruktor überladen
* ich habe zum 1. Mal einen Zeiger an einen Konstruktor übergeben
* ich habe zum 1. Mal Daten zwischen 2 dynamischen Form-Instanzen ausgetauscht
* ich weiß jetzt, dass ich auch im Header ein #include setzen muss, wenn ich dort Objekte eines anderen Forms zugänglich machen willDas nur Mal so auf die Schnelle... Ich poste dann gleich mal noch das Ergebnis als Codeschnipsel!
-
Wenn du den Include wirklich im Header gestzt hast, dann nimm ihn doch probeweise wieder raus und befolge meinen Hinweis mit der Forwarddeklaration. Jetzt mag das für dich vielleicht noch keinen Unterschied machen aber glaube mir, bei größeren Projekten macht sich das bemerkbar.
1. Du verringerst Abhängigkeiten
2. Du erhöhst die Compilegeschwindigkeit
-
Ok, ich belese mich gleich mal dazu und mache das dann - habe ich gar nicht mehr dran gedacht.
Edit: Das ist gut - mache ich jetzt öfter - Dankeschön!
-
Noch eine wichtige Frage zu der Problematik:
Wäre es nicht geschickter hier mit einer Referenz zu arbeiten anstelle eines Zeigers???
-
Öh?!? Wenn es um die Forumlare geht: Komponenten im VCL-Stil MUESSEN mit new erstellt werden, somit hast Du nur einen Zeiger auf das Objekt, aber kein Objekt an sich.
Mir ist unklar, wo Du da jetzt wie eine Referenz einsetzen willst?
-
VCL-Klassen werden grundsätzlich nur dynamisch erstellt und als Zeiger verwendet. Das ist damit begründet, dass sie in Pascal programmiert sind und dort Polymorphie nur über Zeiger realisierbar ist.
Ein normale Referenz würde hier den Standardsyntax ändern und zu unnötigen Verwirrungen führen.
Man könnte natürlich eine Referenz auf einen Zeiger nehmen. Einen Vorteil dabei sehe ich hier aber nicht.
-
Ok, Danke Ihr beiden