AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi OOP: Bidirektionale Beziehung zw. Klassen [erledigt]
Thema durchsuchen
Ansicht
Themen-Optionen

OOP: Bidirektionale Beziehung zw. Klassen [erledigt]

Ein Thema von Passi077 · begonnen am 16. Apr 2006 · letzter Beitrag vom 16. Apr 2006
Antwort Antwort
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#1

OOP: Bidirektionale Beziehung zw. Klassen [erledigt]

  Alt 16. Apr 2006, 16:20
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:
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;
Nun muss ich zwischen diesen beiden Klassen eine bidirektionale Beziehung aufbauen, damit

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:
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;
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.

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:
type cParticleEffekt=class
end;
Sozusagen eine leere Klasse. Leider kommt dann die Meldung bei der richtigen Klasse, dass der Bezeichner redefiniert wird..

Danke + Grüße
Passi
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:23
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:27
@SirThornberry, bitte verwende Delphi-Tags !

Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:37
Zitat von turboPASCAL:
@SirThornberry, bitte verwende Delphi-Tags !
Und kein denglish!
Zitat:
vorwardeclaration
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:38
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 von turboPASCAL:
@SirThornberry, bitte verwende Delphi-Tags !
Gruß
Hansa
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#6

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:43
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?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:54
Das hat der Sir gemeint. 8) Deklarieren, damit der Name bekannt ist, verwendet werden kann und dann weiter unten richtig (komplett) deklarieren.
Gruß
Hansa
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 16:57
So geht es:

Delphi-Quellcode:
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;
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.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#9

Re: OOP: Bidirektionale Beziehung zw. einzelner und Array-Kl

  Alt 16. Apr 2006, 17:03
Jupp, Dankeschön !
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: OOP: Bidirektionale Beziehung zw. Klassen [erledigt]

  Alt 16. Apr 2006, 17:53
oh man, danke für den Hinweis mit den Delphitags, hab da wohl bissl was verhauen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz