AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism wechselseitige kennt beziehung (forward deklaration)
Thema durchsuchen
Ansicht
Themen-Optionen

wechselseitige kennt beziehung (forward deklaration)

Ein Thema von Jake1 · begonnen am 19. Mär 2007 · letzter Beitrag vom 20. Mär 2007
Antwort Antwort
Jake1

Registriert seit: 19. Mär 2007
3 Beiträge
 
#1

wechselseitige kennt beziehung (forward deklaration)

  Alt 19. Mär 2007, 14:04
hallo bin gerad dabei pacman nachzuprogrammieren hab jedoch nen fehler dirn den ich komischerweise nicht rausbekomme! und zwar gehts darum das ein objekt ein anderes kennen muss und umgekehrt!
ich bekomme immer in der unit upacman den fehler, dass tmonster nicht vollständig definiert ist!!!
hier der quellcode für alles

Delphi-Quellcode:
Hauptunit:

interface

uses upacman,umonster;

...

    pacman:tpacman;
    monster:tmonster;

....

 pacman:=tpacman.create(fspielfeld);
 monster:=tmonster.create(fspielfeld);
 if monster<>nil
  then
   begin
    pacman.kennt(monster);
    monster.kennt(pacman);
   end;
 if pacman<>nil
  then
   begin
    monster.kennt(pacman);
    pacman.kennt(monster);
   end;
...
end.

Pacmanunit(upacman)

type tmonster=class; //HIER TRITT DER FEHLER AUF
     TPacman=class(TObject)

    private
     kmonster:tmonster;

...
procedure TPacman.kennt(monster: tmonster);
begin
 kmonster:=monster;
end;
...
end.

Monsterunit(umonster)

uses upacman;

type tmonster=class(tobject)

      kpacman:tpacman;

...
procedure tmonster.kennt(pacman: tpacman);
begin
 kpacman:=pacman;
end;
...
end.
vielleicht erkennt ja einer von euch den fehler!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: wechselseitige kennt beziehung (forward deklaration)

  Alt 20. Mär 2007, 08:52
Solche wechselseitigen Beziehungen sind nur lösbar, wenn du entweder in einer Klasse ein unspezialisierte Instanz hälst (TObject) und in den Implementationen dann immer castest. Andere Möglichkeit wäre es, beide Klassen in einer Unit zu deklarieren, dann würde die Forwarddeklaration auch funktionieren. Diese muss grundsätzlich in der Unit noch aufgelöst werden, wo sie deklariert worden ist (also die Klasse muss darin auch noch definiert werden).
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: wechselseitige kennt beziehung (forward deklaration)

  Alt 20. Mär 2007, 10:01
Zitat von Jake1:
Und zwar gehts darum das ein objekt ein anderes kennen muss und umgekehrt!
Hi und erstmal Herzlich Willkommen in der DP

Dein eigentliches Problem liegt schon darin, dass Du eine solche Wechselseitige Abhängigkeit benötigst. Am schönsten lässt sich ein solches Problem immer umgehen, wenn Du eben auf diese Art von Beziehung verzichtest.
Die Frage ist, warum muss ein Monster Pacman kennen und umgekehrt? Das ein Monster Pacman kennt ist klar, immerhin sollen die den ja jagen bzw. merken wenn er erwischt wurde. Natürlich kannst Du auch Pacman prüfen lassen, ob er gerade gegen ein Monster gelaufen ist, aber wozu müssen die Beiden sich wechselseitig kennen?

Eine gute Alternative ist es dann noch, dass Du mit Interfaces (abstrakte Schnittstellen) oder Vorfahr-Klassen arbeitest. So werden alle Spielfiguren ein paar gemeinsame Eigenschaften haben (z.B. können sie nicht durch Wände laufen, bewegen sich, ...). Das alles kannst Du dann schon in eine gemeinsame Vorfahrklasse packen. Den erbenden Klassen ist dann schon mindestens dieser Vorfahre bekannt. Da Pacman ziemlich einzigartig ist, wird jede andere Instanz dieser Vorfahrklasse natürlich ein Monster sein. Somit kann Pacman schon erkennen, ob es sich bei einem Objekt um ein Monster handelt, ohne dass die Klasse Monster zu dem Zeitpunkt existiert (sauberer wäre aber ein Monster Interface!). Wenn Du dann die Monster erstellst ist Pacman schon fertig und Du kannst die entsprechende fertige Implementierung verwenden (schöner auch hier ein Interface!).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Jake1

Registriert seit: 19. Mär 2007
3 Beiträge
 
#4

Re: wechselseitige kennt beziehung (forward deklaration)

  Alt 20. Mär 2007, 14:58
Hallo danke erstmal an alle helfenden!

@der unwissende:
du hattest recht pacman muss garnicht das monster kennen!!!nachdem du mir diesen tipp gegeben hast hab ich mein programm mal schnell umgeschrieben und siehe da ich benötige gar keine wechselseitigen kennt-beziehungen mehr! jetzt kennt nur noch das monster die position von pacman und kann ihn somit auch jagen!!! und das mit den abgeleiteten klassen werd ich auch noch so machen!!! also danke für die schnelle hilfe!!!!
  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 23:45 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