Wie kann man Klassen über Kreuz benutzen?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

Wie kann man Klassen über Kreuz benutzen?

Beitragvon RSE » 30. Jul 2008, 12:27 Wie kann man Klassen über Kreuz benutzen?

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!
RSE
 
Beiträge: 462
Registriert: 30. Jul 2008, 12:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon pluto » 30. Jul 2008, 13: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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6413
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon RSE » 30. Jul 2008, 13: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!
RSE
 
Beiträge: 462
Registriert: 30. Jul 2008, 12:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon pluto » 30. Jul 2008, 13: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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6413
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon RSE » 30. Jul 2008, 14: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!
RSE
 
Beiträge: 462
Registriert: 30. Jul 2008, 12:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon pluto » 30. Jul 2008, 14:10

Das stimmt auch wieder. Zu not könnte man auch noch inc Dateien benutzen.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6413
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon RSE » 30. Jul 2008, 14: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!
RSE
 
Beiträge: 462
Registriert: 30. Jul 2008, 12:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon pluto » 30. Jul 2008, 14: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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6413
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon mintpc » 15. Dez 2015, 10:21 Re: Wie kann man Klassen über Kreuz benutzen?

Danke auch von mir.

Hatte grad dasselbe Problem und wieder mal hier gefunden!
Perfekt!

mintpc
mintpc
 
Beiträge: 108
Registriert: 6. Sep 2010, 17:39
Wohnort: Mailand
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0) | 
CPU-Target: Win 7
Nach oben

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried