| Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 07.10.03 19:13
Hallo,
ich hab folgenden code: (steht in einer unit drin)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TTest1 = class(TThread) private protected procedure Execute; override;
public FSound:TSound; constructor Create(ACreateSuspended: Boolean; Sound: TSound);
end; |
steht in einer andren unit drin:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| type TSound = class private GoFlag:Integer; test:TTest1; protected
public PlayListe: array of TPlayListe; Random_Music: array of TPlayListe; laden,noTime:Boolean; AIndex:Integer; constructor create(pSoundFiles,SoundDir,DefaultExt:String;flag:Integer); procedure StopMusic; procedure NewMusik; procedure NewMusik2; procedure LoadMusikFile(Index:Integer;RM:Boolean); procedure AddPlayListe(FileName:String); procedure PlayMusikFile(Index:Integer); end; |
jetzt brauche ich die erste klasse in der zweiten unit und die zweite klasse in der ersten unit, wie bekomme ich es hin? egal was ich mache es kommt immer zu den gleichen compiler fehler:
| Zitat: | | [Fataler Fehler] soundsystem.pas(10): Überkreuzender Bezug zweier Units auf 'soundsystem' |
Moderiert von Tino: Topic verschoben; Quote-Tags hinzugefügt.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Di 07.10.03 19:16
du musst beide Klassen in eine Unit schreiben, dann gehst. Eventuell brauchst du noch eine Forwarddeklaration einer der Klassen, ich habs mir jetzt nich genau angeguckt.
Alternativ kannst du auch nach implementation ein weiteres uses einfügen und dort die andere Unit einbinden. In diesem Fall dann in der Unit von TSound, weil du TTest1 nicht in der deklaration von TSound benutzt.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 07.10.03 19:18
diesen möglichkeit habe ich auch versucht, ging aber auch nicht, weil beide klassen brauchen sich gegenseitig, aber den ein tipp kann ich mal testen.
geht auch nicht, weil ich eine variable habe bei der crate funktion habe ich es hinzugefügt(Forward) 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Di 07.10.03 19:23
wenn du es in einer unit schreibst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TTest1 = class; TSound = class;
TTest1 = class(TThread) private ... TSound = class private GoFlag:In ... |
da gibts auch was in der Hilfe, wenn ich mich recht erinnere (Vorwärtsdeklaration, gugg mal da )
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Zuletzt bearbeitet von Keldorn am Mi 08.10.03 08:13, insgesamt 1-mal bearbeitet
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 07.10.03 22:14
diese art kenne ich garnicht, könntes du die genauer beschreiben ?
werde ich morgen mal testen
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mi 08.10.03 08:17
Hallo
hatte in meinem Post noch nen Fehler drin, habs korrigiert.
muß TTest1 = class; statt TTest1 = class(thread); heißen
Ist es denn so schwer den begriff in der Hilfe einzugeben? Besser erklären als da kann ich es sowieso nicht. in der D6pro Hilfe gehts direkt über den Index, bei D5Std muß man über die suche gehen. Den Topic Vorwärtsdeklarationen und voneinander abhängige Klassen gibts aber auch in der d5 Hilfe.
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 08.10.03 17:50
danke werde ich testen.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 08.10.03 18:03
also in meiner delphi 6 Hilfe konnte ich leider nichts finden über diese art von klassen defination.
kann mir jemmand ein beispiel schreiben ?
Danke
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.10.03 08:54
| mimi hat folgendes geschrieben: |
kann mir jemmand ein beispiel schreiben ?
|
was glaubst du was in meinem ersten Post steht?
| Zitat: |
also in meiner delphi 6 Hilfe konnte ich leider nichts finden über diese art von klassen defination.
|
Delphi-Hilfe -> Suchen -> Vorwärtsdeklaration eingeben
ein andere Variante wäre für 2 Units
(nur Beispielcode)
1. unit: (unit2)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| unit Unit2;
interface
uses classes, unit3;
type TTest1 = class(TThread) private protected Sound:TSound; public published end;
implementation
end. |
2. unit (unit3):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| unit Unit3;
interface
uses classes;
type TSound = class(TObject) private Test:TObject; procedure Zugriff; protected public published end;
implementation
uses unit2; Procedure TSound.Zugriff; Var myThread:TThread; begin myThread := TThread(Test); end;
end. |
was anderes würde mir nicht einfallen, würde aber die Typumwandlung vermeiden (hier schleichen sich für mich viel zu schnell Fehler ein und es wird zu uneindeutig (was ist test bei tsound...)) und alles in eine unit schreiben.
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 09.10.03 15:56
habe es jetzt geschaft, aber ein problem habe ich nocht:
ich möchte variabeln von TSound nutzen aus TTest1 wie köntne ich das am besten machen ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Do 09.10.03 15:59
wenn die sich gegenseitig verwenden, geht das nur mit pointern.
z.B:
Delphi-Quelltext
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 09.10.03 17:15
könntes du mal ein ausfürhlichers beispiel geben ?
ich habe jetzt eine variable PSound erstellt(als Pointer) habe aber das problem das jetzt PSound = Nil ist.
ich wollte die variabeln dirckt nutzen, geht das auch irngendwie ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 09.10.03 18:14
warum geht das nicht:
if @PSound.noTime = True then ShowMessage('TEST');
da sagt er immer:
Inkompatible Typen, warum ????
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
barfuesser
      
Beiträge: 324
|
Verfasst: Do 09.10.03 18:17
Delphi-Quelltext 1:
| if PSound^.noTime = true then ShowMessage('Test'); |
[edit]
übrigens reicht bei Booleans auch die direkte Abfrage ohne den expliziten Vergleich mit true. Dieser liefert nämlich auch nur ein Bool, den man dann ja wieder mit true vergleichen müßte usw. usf.
[/edit]
barfuesser
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 09.10.03 18:20
jetzt ist psound immer nil. muss ich ein pointer erst installiesiren ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 09.10.03 18:27
ich habe es jetzt so versucht, aber das geht leider auch nicht
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| TTest1 = class(TThread) public test:STring; end;
TSound = class private GoFlag:Integer; test:TTest1;
protected
public PlayListe: array of TPlayListe; Random_Music: array of TPlayListe; laden,noTime:Boolean; AIndex:Integer; constructor create(pSoundFiles,SoundDir,DefaultExt:String;flag:Integer); procedure StopMusic; procedure NewMusik; procedure NewMusik2; procedure LoadMusikFile(Index:Integer;RM:Boolean); procedure AddPlayListe(FileName:String); procedure PlayMusikFile(Index:Integer); end;
TTest2 = class(TTest1) private
protected procedure Execute; override;
public PSound:TSound; Test:String; constructor Create(ACreateSuspended: Boolean); end; |
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.10.03 19:37
ich seh hier nicht mehr durch, was du tun willst.
du hat aber auch irgendwo im Thread bzw. TTest-constructor ein Sound:=TSound.create stehen?
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 09.10.03 19:40
nein habe ich nicht.
ich möchte folgendes:
habe zwei klassen die sich gegenseitig brauchen.
nun wollte ich das mit pointern versuchen, aber das geht leider auch nicht 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.10.03 19:48
| mimi hat folgendes geschrieben: | nein habe ich nicht.
|
wenn du deine Objekte nicht erzeugst, was außer Nil soll denn dann der Inhalt sein?
oder wo erzeugst du dein Tsound objekt und weiß es Psound zu?
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 10.10.03 11:25
habe das problem gelöst, aber jetzt kommt eine endlos schleife, und ein res überlauf, ich glaube auch ich weiß warum *G*
den rest schaffe ich alleine, danke.
habe das jetzt mit diesen vorwärts dekaltion gemacht und fertig.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|