Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
RSE
Beiträge: 462 Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:
Beitrag
von RSE » Mi 30. Jul 2008, 13:27
Hallo!
Ich möchte folgendes realisieren:
Code: Alles auswählen
Type
TMyClass = class(TObject)
private
Thread: TMyThread;
end;
TMyThread = class(TThread)
private
C: TMyClass;
public
constructor Create(CreateSuspended: Boolean; AC: TMyClass);
end;
Leider finde ich keinen Weg es dem Compiler beizubringen. Das muss doch irgendwie möglich sein, mit irgend einer Form von Forward-Deklaration. Momentan habe ich nur den Workaround mit dynamischen Typecasts gefunden:
Code: Alles auswählen
Type
TMyThread = class(TThread)
private
C: TObject;
public
constructor Create(CreateSuspended: Boolean; AC: TObject);
end;
TMyClass = class(TObject)
private
Thread: TMyThread;
end;
implementation
constructor TMyThread.Create(CreateSuspended: Boolean; AC: TObject);
begin
C := AC;
TMyClass(C).irgendwas;
...
end;
Das kann ja eigentlich nicht die einzig machbare Lösung sein.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
pluto
Lazarusforum e. V.
Beiträge: 7192 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Mi 30. Jul 2008, 14:42
Du könntest auch noch eine Vorward Defination machen: Einfach die Klasse die du später nutzen möchtest Oben Definieren:
type
TMyClass=class;
so in etwa...
MFG
Michael Springwald
RSE
Beiträge: 462 Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:
Beitrag
von RSE » Mi 30. Jul 2008, 14:53
Danke!
Ich wusste, dass das irgendwie gehen muss, aber ich wusste nicht wie die Syntax ist
Klappt einwandfrei!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
pluto
Lazarusforum e. V.
Beiträge: 7192 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Mi 30. Jul 2008, 14:55
Die sach hat leider nur einen Hacken, über verschiedene Units geht das so nicht. Alle Klassen müssen also in einer Unit rein...
MFG
Michael Springwald
RSE
Beiträge: 462 Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:
Beitrag
von RSE » Mi 30. Jul 2008, 15:05
Das ist ja kein größeres Problem. Höchstens eins der Übersichtlichkeit, aber das ist verschmerzbar. Aber immerhin besser als mit Typecast
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
pluto
Lazarusforum e. V.
Beiträge: 7192 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Mi 30. Jul 2008, 15:10
Das stimmt auch wieder. Zu not könnte man auch noch inc Dateien benutzen.
MFG
Michael Springwald
RSE
Beiträge: 462 Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:
Beitrag
von RSE » Mi 30. Jul 2008, 15:15
Hm, das ist eigentlich eine gute Idee. Die Unit umfasst immerhin inzwischen über 880 Zeilen. Danke für den Tipp!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
pluto
Lazarusforum e. V.
Beiträge: 7192 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Mi 30. Jul 2008, 15:42
Bitte !
Ich bin auch erst vor kurtzen darüber gestolpert*G*
Bei meinen Aktuellen Projekt mache ich das im Moment auch so.
Ich glaube das ist vergleichbar mit dem C/C++ Header Dateien....
MFG
Michael Springwald
mintpc
Beiträge: 124 Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand
Beitrag
von mintpc » Di 15. Dez 2015, 10:21
Danke auch von mir.
Hatte grad dasselbe Problem und wieder mal hier gefunden!
Perfekt!
mintpc