![]() |
OOP: Bidirektionale Beziehung zw. Klassen [erledigt]
Hi,
ich bin gerade dabei eine PartikelEngine zu programmieren. Das Ganze soll objektorientiert geschehen. Dazu habe ich 2 Klassen erstellt: cParticleEffekt und cParticle:
Delphi-Quellcode:
Nun muss ich zwischen diesen beiden Klassen eine bidirektionale Beziehung aufbauen, damit
type cParticle=class
private thePosX, thePosY: real; procedure setVelocity(pVelocity: Velocity3f); procedure Kill(); end; type cParticleEffekt=class private theMaxParticleCount: integer; theTime: real; particle: array of cParticle; public procedure Calculate(t: real); procedure addParticle(pIndex, pPreset: integer); constructor create(pMaxParticles: integer); end; a) die Klasse cParticleEffekt auf die einzelnen Partikel zugreifen kann und diese berechnen kann b) die Klasse cParticle Zugriff auf Variablen der Klasse cParticleEffekt hat, welche sich global auf alle Partikel auswirken Leider bin ich damit überfordert. Ich wollte die Klasse cParticle von der cParticleEffekt Klasse abhängig machen und habe das Ganze so modelliert:
Delphi-Quellcode:
Jetzt kennt die Klasse cParticle aber natürlich den Datentyp cParticleEffekt noch nicht.. wenn ich das Ganze umdrehe im Code, dann kennt eben die Klasse cParticleEffekt den DAtentyp cParticle nicht, und das ist mein Problem.
type cParticle=class
private thePosX, thePosY: real; [b] ParticleEffekt: cParticleEffekt; [/b] procedure setVelocity(pVelocity: Velocity3f); procedure Kill(); [b] constructor create(pParticleEffekt: cParticleEffekt); [/b] end; type cParticleEffekt=class private theMaxParticleCount: integer; theTime: real; [b] particle: array of cParticle; [/b] public procedure Calculate(t: real); procedure addParticle(pIndex, pPreset: integer); constructor create(pMaxParticles: integer); end; Wie muss ich das korrekt modellieren, damit es realisierbar ist? Oder: Wie erstelle ich die Signatur einer Klasse? Also sowas in der Art:
Delphi-Quellcode:
Sozusagen eine leere Klasse. Leider kommt dann die Meldung bei der richtigen Klasse, dass der Bezeichner redefiniert wird..
type cParticleEffekt=class
end; Danke + Grüße Passi |
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
einfach eine vorwardeclaration:
Delphi-Quellcode:
type
cParticleEffekt = class; cParticle=class(TObject) private thePosX, thePosY: real; procedure setVelocity(pVelocity: Velocity3f); procedure Kill(); end; cParticleEffekt=class(TObject) private theMaxParticleCount: integer; theTime: real; particle: array of cParticle; public procedure Calculate(t: real); procedure addParticle(pIndex, pPreset: integer); constructor create(pMaxParticles: integer); end; |
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
@SirThornberry, bitte verwende Delphi-Tags ! :mrgreen:
:wink: |
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
Zitat:
Zitat:
|
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
Wo ist da was mit forward ?? Ich sehe nur eine Klasse, die zweimal deklariert wird. Einmal leer und danach mit Inhalt. Vielleicht liegts aber tatsächlich hier dran :
Zitat:
|
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
Hiho,
danke für die Antwort. Leider funktioniert das nicht so wirklich..
Delphi-Quellcode:
type
cParticleEffekt = class; Spuckt bei mir den Fehler aus: [Fehler] uParticleEngine.pas(29): Typ 'cParticleEffekt' ist nicht vollständig definiert :?: Wie funktioniert das denn genau mit der Forward Deklaration? |
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
Das hat der Sir gemeint. 8) Deklarieren, damit der Name bekannt ist, verwendet werden kann und dann weiter unten richtig (komplett) deklarieren.
|
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
So geht es:
Delphi-Quellcode:
Innerhalb eines Deklarationsabschnitts müssen alle Typen vollständig definiert sein. Mit der zweiten TYPE-Anweisung wurde der erste Abschnitt beendet und ein zweiter begonnen.
type
cParticleEffekt = class; cParticle = class private thePosX, thePosY: real; ParticleEffekt: cParticleEffekt; procedure setVelocity(pVelocity: Velocity3f); procedure Kill(); constructor create(pParticleEffekt: cParticleEffekt); end; // type <-- das darf hier nicht stehen cParticleEffekt = class private theMaxParticleCount: integer; theTime: real; particle: array of cParticle; public procedure Calculate(t: real); procedure addParticle(pIndex, pPreset: integer); constructor create(pMaxParticles: integer); end; Gruß Hawkeye |
Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl
Jupp, Dankeschön :) !
|
Re: OOP: Bidirektionale Beziehung zw. Klassen [erledigt]
oh man, danke für den Hinweis mit den Delphitags, hab da wohl bissl was verhauen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz