Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Di 07.10.03 19:13 
Hallo,

ich hab folgenden code: (steht in einer unit drin)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
TTest1 = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;

  public
    FSound:TSound;
    constructor Create(ACreateSuspended: Boolean; Sound: TSound);

  end;

steht in einer andren unit drin:
ausblenden 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); // Lädt die Angebenden Sound Files
      procedure StopMusic; // stop alles geladene musik dateien.
      procedure NewMusik;
      procedure NewMusik2;
      procedure LoadMusikFile(Index:Integer;RM:Boolean);
      procedure AddPlayListe(FileName:String); // Fügt der Playliste eine Datei hinzu
      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 user profile iconTino: Topic verschoben; Quote-Tags hinzugefügt.

_________________
MFG
Michael Springwald, "kann kein englisch...."
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 07.10.03 19:23 
wenn du es in einer unit schreibst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type 
   //vorwärtsdeklaration
  TTest1 = class;
  TSound = class;  

   //eigentliche dekl.
TTest1 = class(TThread)
  private
    { 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 :oops: :oops:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 08.10.03 17:50 
danke werde ich testen.

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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? :roll:

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)
ausblenden 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):
ausblenden 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;  // nur als tObject
    procedure Zugriff;
  protected
  public
  published
  end;

implementation

uses unit2;  //in implemention teil unit 

Procedure TSound.Zugriff;
Var myThread:TThread;
  begin
    myThread := TThread(Test); //zugriff
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Do 09.10.03 15:59 
wenn die sich gegenseitig verwenden, geht das nur mit pointern.
z.B:

ausblenden Delphi-Quelltext
1:
PSound = ^TSound;					
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Do 09.10.03 18:17 
ausblenden Delphi-Quelltext
1:
if PSound^.noTime = true then ShowMessage('Test'); // falls noTime ein Boolean ist					


[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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 09.10.03 18:20 
jetzt ist psound immer nil. muss ich ein pointer erst installiesiren ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Do 09.10.03 18:27 
ich habe es jetzt so versucht, aber das geht leider auch nicht :(
ausblenden volle Höhe 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:
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); // Lädt die Angebenden Sound Files
      procedure StopMusic; // stop alles geladene musik dateien.
      procedure NewMusik;
      procedure NewMusik2;
      procedure LoadMusikFile(Index:Integer;RM:Boolean);
      procedure AddPlayListe(FileName:String); // Fügt der Playliste eine Datei hinzu
      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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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...."