Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem, Vererbung, Überschreibung von Methoden


Moony - Do 12.05.05 16:04
Titel: Problem, Vererbung, Überschreibung von Methoden
Ich hab das Problem: Ich zitiere: [Fehler] mTSpurKugel.pas(12): Eine statische Methode kann nicht überschrieben werden. Also wie ich die Vererbung verstanden habe: Der erbende Klasse muss gesagt werden von wem sie erbt. Will ich einige Methoden ändern, so muss in der Oberklasse hinter die Betreffenen virtual und in der Unterklasse override. Jetzt bekomm ich aber den Fehler. (2x weil ich 2Methoden überschreiben will) Es handelt sich bei dem Programm um ein mehr oder weniger (eher weniger) realistisches Billardspiel.

Im Programm siehts wie folgt aus.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
unit mTKugel; (Oberklasse)
       private
            ... und so weiter
       public
           constructor init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit : double);  virtual;
           procedure loescheDich ( ); virtual;
           ... und so weiter



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
unit mTSpurKugel; (Unterklasse)
interface
  uses
   mSuM,mTTisch,mTKugel;
type
   TSpurKugel = CLASS (TKugel)
   public
     hatBuntstift : Buntstift;
     constructor init (pPosX, pPosY, pRadius, pRichtung : double); override;
     procedure loescheDich ( ); override;
   end;
..und so weiter



Wahrscheinlich bin ich einfach nur zu sehr auf den Fehler eingeschossen, dass ich den Wald vor Bäumen nicht sehe. Hoffe ihr könnt mir helfen

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.
Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Do 12.05.2005 um 16:25


opfer.der.genauigkeit - Do 12.05.05 16:20
Titel: Re: Problem, Vererbung, Überschreibung von Methoden
Auf den ersten Blick sieht das OK aus.
Zeig mal den Rest :)


Muetze1 - Do 12.05.05 23:22

Moin!

Die Parameterliste im Init bzw. Constructor hat sich geändert, daher die Frage ob du den Originalen verdecken willst oder einen zusätzlichen implementieren willst?

MfG
Muetze1


iX0r - Fr 13.05.05 08:55

wenn es keine implmentierung in der oberklasse gibt (der methode constructor), dann muss noch ein abstract dahinter. in der art:

Delphi-Quelltext
1:
 procedure constructor(...);virtual;abstract;                    


Muetze1 - Fr 13.05.05 10:17

Moin!

user profile iconiX0r hat folgendes geschrieben:
wenn es keine implmentierung in der oberklasse gibt (der methode constructor), dann muss noch ein abstract dahinter. in der art:

Delphi-Quelltext
1:
 procedure constructor(...);virtual;abstract;                    


1. Ist es AFAIR nicht möglich das Schlüsselwort Constructor als Methodennamen zu nutzen.
2. Meinte ich direkt den Constructor und keine Methode.
3. Woher weisst du / willst du wissen, dass er in der Klasse nix implementiert in der Klasse?
4. Nur weil man keinen Inhalt in der Methode hat, muss man noch lange nicht zu abstrakt greifen - ein leerer Methodenrumpf reicht auch. Abstrakt wird für andere Dinge / Zwecke benutzt. Oder habe ich das jetzt falsch verstanden? Weil mir kommt es so vor, als das du die Verwendung von Abstract als Folge der nicht-Implementierung benennst. Dabei ist es doch genau anders herum: Durch die Benutzung von Abstract darf keine Implementierung in der Klasse erfolgen - schon allein durch die Definition des Abstract Schlüsselwortes.
5. Die Lösung hilft noch nicht gegen das o.g. Problem.

MfG
Muetze1


Moony - Fr 13.05.05 14:00

Aha. Und was ich jetzt genau machen soll heißt auf Deutsch?
Okidoki. Wenn ihr alles sehen wollt, dann bitteschön.


hier die ganze Oberklasse

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:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
 unit mTKugel;
interface
  uses
    mSuM,
    mTTisch;
   type
       TKugel = CLASS

       private
           procedure setzeRichtung (pRichtung : double);
           function hPosition ( ): double;
           function vPosition ( ): double;
           function gibRichtung ( ): double;
       public
           constructor init (pPosX, pPosY, pRadius, pRichtung : double);  virtual;
           procedure zeichneDich ( ); virtual;
           procedure loescheDich ( ); virtual;
           procedure bewegeDich ( );
           procedure merke (pTisch : TTisch);
           destructor gibFrei ( );
       protected
           hatBuntstift : Buntstift;
           zPosX : double;
           zPosY : double;
           zRadius : double;
           zRichtung : double;
           kenntTisch : TTisch;
end;

implementation
  constructor TKugel.init (pPosX, pPosY, pRadius, pRichtung : double);
    begin
      hatBuntstift := Buntstift.init;
      zPosX := pPosX;
      zPosY := pPosY;
      zRadius := pRadius;
      zRichtung := pRichtung;
      hatBuntstift.bewegeBis (zPosX, zPosY);
      hatBuntstift.dreheBis (pRichtung);
    end;

  procedure TKugel.merke (pTisch : TTisch);
    begin
      kenntTisch := pTisch;
    end;

  procedure TKugel.zeichneDich ( );
    begin
      hatBuntstift.zeichneKreis (zRadius);
    end;

  procedure TKugel.loescheDich ( );
    begin
      hatBuntstift.radiere ( );
      self.zeichneDich ( );
      hatBuntstift.normal ( );
    end;

  procedure TKugel.bewegeDich ( );
    begin
      self.loescheDich ( );
      hatBuntstift.bewegeUm (0.05);
      if (self.hPosition+zRadius >= kenntTisch.anfangsXP+kenntTisch.tischBreite-4or (self.hPosition-zRadius <= kenntTisch.anfangsXP+4then
        begin
          self.setzeRichtung (180-self.gibRichtung);
      end;
      if (self.vPosition-zRadius <= kenntTisch.anfangsYP+4or (self.vPosition+zRadius >= kenntTisch.anfangsYP+kenntTisch.tischHoehe-4then
        begin
          self.setzeRichtung (360-self.gibRichtung);
      end;
      self.zeichneDich ( );
    end;

  procedure TKugel.setzeRichtung (pRichtung : double);
    begin
      zRichtung := pRichtung;
      hatBuntstift.dreheBis (pRichtung);
    end;

  function TKugel.gibRichtung ( ): double;
    begin
      gibRichtung := zRichtung;
    end;

  function TKugel.hPosition ( ): double;
    begin
      hPosition := hatBuntstift.hPosition ( );
    end;

  function TKugel.vPosition ( ): double;
    begin
      vPosition := hatBuntstift.vPosition ( );
    end;

  destructor TKugel.gibFrei ( );
    begin
      hatBuntstift.gibFrei ( );
    end;
end.



so und die hier die ganze Unterklasse.

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 mTSpurKugel;
interface
  uses
    mSuM,
    mTTisch,
    mTKugel;
type
   TSpurKugel = CLASS (TKugel)
   public
     hatBuntstift : Buntstift;
     constructor init (pPosX, pPosY, pRadius, pRichtung : double); override;
     procedure loescheDich ( ); override;
   end;

implementation
constructor TSpurKugel.init (pPosX, pPosY, pRadius, pRichtung : double);
begin
  inherited init (pPosX, pPosY, pRadius, pRichtung);
  hatBuntstift.runter;
end;

procedure TSpurKugel.loescheDich;
begin
  hatBuntstift.wechsle;
  self.zeichneDich;
end;
end.


jaenicke - Fr 13.05.05 14:06

Erstmal ein Hinweis, bevor ich mir das ansehe:
Bevor du Quelltext in das Eingabefeld hier schreibst kannst du oben auf Delphi drücken, und danach nochmal, dann wird der Quelltext hier formatiert dargestellt.
Code ist nicht so gut, weil damit nicht Delphi-Code hervorgehoben wird.


Moony - Fr 13.05.05 14:11

ahhh. Das sieht ja gleich schon ganz anders aus. Dankeschön


jaenicke - Fr 13.05.05 14:13

1. Also ein Fehler ist schonmal, dass du in Zeile 18 von deiner Unterklasse inherited mit den Parametern deiner Unterklasse aufrufst. Da musst du aber die der Oberklasse nehmen und die Geschwindigkeit mit angeben!

//edit: :oops:, in deiner neuen Oberklasse ist das ja gar nicht mehr drin, also ist das Ok...

2. Woher die Fehlermeldung kommt, verstehe ich allerdings nicht, denn mit der Verwendung von virtual ist die Methode nicht mehr statisch...

Ich werde das mal zu Hause ausprobieren, was bei mir passiert!


Moony - Fr 13.05.05 14:16

Entschuldigung, das mit der Geschwindigkeit hatte ich nachträglich rausgenommen. Weil eigentlich sollte es rein, aber solange das Programm mit dem verhexten Fehler nicht funktioniert hab ich es rausgenommen. Das waren also Restbeständen die ich übersehen hatte. Sorry

Ach noch was die Fehler tauchen in Zeile 11 und 12 von der Unterklasse auf. Falls das hilft. Hoffe ich


Moony - Fr 13.05.05 16:52

Ist es vielleicht möglich, dass mein Delphi aufm Rechner keine Vererbung zulässt? Also das ich irgendwo was umstellen muss?? Vielleicht ne blöde Frage, aber ich wüsst sonst keine andere Erklärung mehr.


Delete - Fr 13.05.05 17:05

Eventuell hilft auch mein Tutorial: http://tutorials.luckie-online.de


Moony - Fr 13.05.05 18:05

Jetzt weiß ich überhaupt nichts mehr. Ich hab mal aus reiner Verzweiflung virtual und override aus dem Programm gelöscht und jetzt funktioniert es..... Jedoch kommt wenn ich meine TSpurKugel durch den Tastendruck 's' aufrufen möchte ein Anwendungsfehler:
Zitat:
Exception EAccessViolation in Modul Billard.exe bei 00044D05.
Zugriffsverletzung bei Adresse 00444D05 in Modul 'Billard.exe'. Lesen von Adresse 00000000.


Und beim zweiten Starten kommt folgender Fehler:
Zitat:
Im Projekt Billard.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00444D05 in Modul 'Billard.exe'. Lesen von Adresse 00000000'. Prozeß wurde Angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

dann wird ein grüner Pfeil auf die Zeile 19 von der Unterklasse angezeigt.
Hab ich ein mutiertes Programm oder will es mich einfach nur zur Weißglut bringen, wenn ja hat es das geschafft.

Moderiert von user profile iconTino: Quote-Tags hinzugefügt.


Moony - Fr 13.05.05 19:28

Ok, ich habs Problem weg. Es lag an einem Simekolonfehler im Hauptprogramm hinter einem gibFrei. Denn da stand keins.... Echt panne son Fehler!!!
Jetzt hab ich aber immmernoch das Problem damit, dass meine TSpurKugel zwar richtig programmiert ist ich sie aber nicht aufrufen kann wegen diesem komischen Zugriffsfehler.
Hoffe ihr habt darauf ne Erklärung??


Moony - Fr 13.05.05 19:33

Ok ich nehm alles zurück!! Der blöde Fehler mit der statischen Methode ist bei erneutem starten von Delphi wieder da. ÜBERRASCHUNG.


Muetze1 - Sa 14.05.05 00:24

Moin!

1. hatBuntstift sollte in der Basisklasse im Protected Teil stehen
2. hatBuntstift hast du in der abgeleiteten Klasse neu definiert - also ist das eine neue Instanz. Dazu besteht das Problem, dass du keine neue Instanz anlegst für diese Variable und somit Probleme beim Zugriff bekommst.

Alles weitere schaue ich mir nachher an...

MfG
Muetze1


Moony - Sa 14.05.05 08:35

Also gut. So wie ich dich vertanden habe. Muss ich in der Unterklasse im public-Teil den Buntstift rausnehmen und ihn nur in der Oberklasse unter protected stehen lassen.
Aha, gut gut. Das klappt auf einmal. Schön schön. Aber wenn ich nun die TSpurKugel mit dem Tastendruck 's' aufrufen will kommt immernoch dieser komische Zugriffsfehler. Und nu?

Moderiert von user profile iconTino: Quote-Tags hinzugefügt.


jasocul - Sa 14.05.05 17:26

Könnte der Fehler in Buntstift.wechsle sein?


Moony - Sa 14.05.05 17:28

Wie meinsten das?? Den Buntstift müsste die SPurkugel doch kennen und der Befehl ist auch der richtige....


jasocul - Sa 14.05.05 17:31

Du benutzt die Klasse Buntstift in TKugel.
Falls aber in der Klasse schon ein Fehler ist (z.B. in der Methode Wechsle), kannst du in Kugel lange nach dem Fehler suchen.


Moony - Sa 14.05.05 17:41

Also ich hab beim installieren von delphi so vorgefertigte Klasse gehabt. Buntstift, Stift, Bildschirm, Uhr, Tastatur. So und deswegen dürfte die Methode wechsle nicht falsch sein, weil ich den Buntstift von der CD aus installiert habe.


jasocul - Sa 14.05.05 17:53

Ich habe hier auch D5 Prof. Bei mir waren die Klassen nicht dabei. Und selbst wenn, ich sehe im Moment sonst keinen Fehler. Auch andere Programmierer können Fehler machen (selbst Profis). Wenn du die Sourcen hast, dann gehe doch mal Schrittweise durch. Falls nicht, dann nimm doch den Methoden-Aufruf mal raus. Hast du dann keine Fehlermeldung mehr, dann weißt du wo der Fehler ist. Hast du den Fehler immer noch, weißt du zumindest, wo er nicht ist.


Moony - Sa 14.05.05 17:59

Sehr gute Idee. Hab ich jetzt gemacht. Hab die Methodenaufrufe hatBuntstift.wechsle und hatBuntstift.runter mal rausgenommen. Und jetzt kommt wieder ein Fehler. Also kein richtiger Fehler- Es kommt wieder diese Zugriffsverletzung und dann zeigt so ein grüner Pfeil auf die Leerzeile zwischen dem end; und der procedure TSpurKugel.loescheDich;


Moony - Sa 14.05.05 18:01

Also ich hab das Programm mal nem Freund geschickt und er bekommt die Fehlermeldung, dass die Units nicht aufeinander abgestimmt sind. Was ist denn damit gemeint?? :shock: :?:


Muetze1 - Sa 14.05.05 18:44

user profile iconMoony hat folgendes geschrieben:
Sehr gute Idee. Hab ich jetzt gemacht. Hab die Methodenaufrufe hatBuntstift.wechsle und hatBuntstift.runter mal rausgenommen. Und jetzt kommt wieder ein Fehler. Also kein richtiger Fehler- Es kommt wieder diese Zugriffsverletzung und dann zeigt so ein grüner Pfeil auf die Leerzeile zwischen dem end; und der procedure TSpurKugel.loescheDich;


user profile iconMoony hat folgendes geschrieben:
Also ich hab das Programm mal nem Freund geschickt und er bekommt die Fehlermeldung, dass die Units nicht aufeinander abgestimmt sind. Was ist denn damit gemeint?? :shock: :?:


Dies beides deutet darauf hin, das deine EXE aus compilierten .DCU's gebaut wird, die nicht mehr zu dem Quellcode passen. Nun ist die Frage ob du die Quellen hast, wenn ja, dann compiliere die Units neu - lösche vorher die DCU Dateien.

MfG
Muetze1


Moony - Sa 14.05.05 18:53

Ich bin ja ein Mädchen, ge? Und so ganz weiß ich nicht was du mir jetzt sagen möchtest. Obwohl dus eigentlich verständlich geschrieben hast. Also, ja, welche EXE?. MIt die Units neu compilieren meinst du, wieder reinkopieren? Und ja, also die Sachen wo die drin waren hab ich nicht mehr. :oops:


jasocul - Sa 14.05.05 20:58

Nimm mal zum Kompilieren den Menüpunkt:
Projekte -> Alle Projekte kompilieren

Dadurch sollten alle zum Projekt gehörigen Units garantiert kompiliert werden, wenn du die Sourcen hast.
Dann prüfst dein Problem nochmal.


Moony - Sa 14.05.05 21:51

Zu meinem großen Frust klappt das nicht, jetzt werden so komische blaue Puntke an der Seite angezeigt und beim starten kommt (als hätten wirs nicht geahnt) der Zugriffsfehler ... :autsch:


Moony - Sa 14.05.05 22:53

HEY, FREUDE. Ich kann einen weiteren Fehler meiner Fehlerhitliste hinzufügen:
Zitat:
[Fataler Fehler] mTKugel.pas: Überkreuzender Bezug zweier Units auf 'mTKugel'

Zu beachten hierbei ist, dass es sich um einen "FATALEN" Fehler handelt...


Muetze1 - Sa 14.05.05 23:15

Moin!

Ok, grundlegendes:



Und ich hoffe mal, dein Projekt läuft dann wieder richtig.

Wenn das mit dem überkreuzenden Bezug nicht geklärt hat, dann schreib nochmal...

MfG
Muetze1


Moony - Sa 14.05.05 23:40

ich glaub ich gebs auf Ich krieg das nie hin. @Muetze: Ich hab alles brav und fein compiliert. dankeschön fürs erklären. aber mein pc ist ein wenig, naja wie soll ich sagen: Stur


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
unit mTDoppelRingKugel;

interface
  uses
    mSuM, mTTisch, mTKugel;

type
  TDoppelRingKugel = CLASS (TKugel)
  public
    procedure zeichneDich ( ); override;
end;

implementation
procedure TDoppelRingKugel.zeichneDich ( );
begin
  inherited zeichneDich ( );
  hatBuntstift.zeichneKreis (10);
end;
end.


das ist übrigens meine neue Unit.... (hab mir so gedacht: Masse überspielt die Fehler... :D)

Zitat:
[Fehler] mTDoppelRingKugel.pas(10): Eine statische Methode kann nicht überschrieben werden
[Fehler] mTDoppelRingKugel.pas(17): Undefinierter Bezeichner: 'hatBuntstift'
[Fehler] mTDoppelRingKugel.pas(17): Operator oder Semikolon fehlt


Irgendwie hab ich das Gefühl, dass mein Unterklasse nicht weiß, dass sie eine ist!


Muetze1 - Sa 14.05.05 23:54

Moin!

user profile iconMoony hat folgendes geschrieben:
ich glaub ich gebs auf Ich krieg das nie hin.


Eins nach dem anderen. Erstmal bringen wir das zum laufen, und dann kannste aufgeben...

user profile iconMoony hat folgendes geschrieben:

Zitat:
[Fehler] mTDoppelRingKugel.pas(10): Eine statische Methode kann nicht überschrieben werden
[Fehler] mTDoppelRingKugel.pas(17): Undefinierter Bezeichner: 'hatBuntstift'
[Fehler] mTDoppelRingKugel.pas(17): Operator oder Semikolon fehlt


Irgendwie hab ich das Gefühl, dass mein Unterklasse nicht weiß, dass sie eine ist!


Das Gefühl habe ich auch. Mir kommt es so vor, als wenn im Suchpfad oder woanders er noch eine andere Datei liegen hat, die TKugel definiert. Aber um nun rauszubekommen wo diese liegt und welche er nimmt, mache mal folgendes:

Klicke mit gedrückter STRG Taste mal auf TKugel in der Zeile 8. Dann sollte sich ein neues Fenster öffnen mit dem Quelltext von TKugel. Nun wäre dabei das wichtige, zu schauen was oben im Titel des Editorfensters für ein Unitname und vor allem Pfad steht. Dadurch würden wir dann auch rausbekommen warum die Methode statisch ist, und ob es wirklich so ist...

MfG
Muetze1


Moony - So 15.05.05 00:09

Fehler: Datein 'mTKugel.pas' kann nicht gefunden werden.
Hää?? aber er findet das Teil doch sonst auch immer??


Muetze1 - So 15.05.05 00:32

Moin!

user profile iconMoony hat folgendes geschrieben:
Fehler: Datein 'mTKugel.pas' kann nicht gefunden werden.
Hää?? aber er findet das Teil doch sonst auch immer??


Da haben wir es ja schon - wie ich es schon vermutet habe. Mit anderen Worten, er findet immer eine .DCU Datei und bindet diese ein - und die stimmt nicht mit der .pas Quelle überein, die du editierst.

Nun frage ich mich noch eins: Wenn du alle Units vorhin dem Projekt hinzugefügt hattest, dann sollte doch die mTKugel.pas mit dabei gewesen sein. Warum ist sie es nun anscheinend wiederrum nicht ?

MfG
Muetze1


Moony - So 15.05.05 00:42

Weiß nicht. Jedenfalls wenn ich alles nochmal hinzufüge kommt: Das Projekt enthält bereits ein Modul bzw. ein Formular mit der Bezeichnung mTKugel.

Und wenn ich es starten lassen kennt er das Viech nicht mehr. HILFE ICH HAB EIN PROGGI MIT ALZHEIMER


Muetze1 - So 15.05.05 00:58

Moin!

Dann schau doch mal nach in der Projektverwaltung (Ansicht->Projektveraltung oder STRG-ALT-F11). Dort siehst (wenn du das Projekt aufklappst) die Liste mit allen Quelldateien des Projektes. Dort müsstest du dann eine mTKugel.pas drinne finden. In dem Projektveraltungsfenster steht hinter dem Dateinamen in der 2. Spalte dann der Pfad wo diese Datei zu finden ist. Ist dieser Pfad ein anderer als der wo das Projekt liegt? Liegt in dem Pfad des Projektes, in dem Pfad mit der mTKugel.pas oder in Delphi selber (C:\Programme\Borland\Delphi\ dort dann Bin\ und Projects\ anschauen) eine mTKugel.pas oder mTKugel.dcu rum?

MfG
Muetze1


Moony - So 15.05.05 01:04

Also erstmal sind alle Units da. mTKugel, mTSpurKugel, mTDoppelRingKugel und mTTisch. Alle liegen im selben Ordner. Außer die DRK, die liegt im gleichen Ordner wie die exe.
Danke für die Hilfe am frühen Morgen. :!:


Muetze1 - So 15.05.05 01:07

Moin!

user profile iconMoony hat folgendes geschrieben:
Also erstmal sind alle Units da. mTKugel, mTSpurKugel, mTDoppelRingKugel und mTTisch. Alle liegen im selben Ordner. Außer die DRK, die liegt im gleichen Ordner wie die exe.


DRK ?? Das deutsche Rote Kreuz bastelt auch mit? Nun ist es nicht ganz eindeutig. Ich könnte jetzt behaupten du meintest die DPR, aber das kann auch die DPK gewesen sein - daher: Welche Dateiendung?

Ansonsten schonmal geschaut ob in dem Verzeichnis mit dem Projektfile (DPR) noch eine mTKugel.dcu oder andere .DCU rumliegen?

MfG
Muetze1


Moony - So 15.05.05 01:11

also ich meinte die DRK DoppelRingKugel, halt. In der Projektverwaltung liegt alles in pas form vor. Von allem liegt eine dcu vor, außer von der DoppelRingKugel nicht, davon seh ich nur eine pas und eine Delphi Source File.


Muetze1 - So 15.05.05 01:17

Moin!

user profile iconMoony hat folgendes geschrieben:
also ich meinte die DRK DoppelRingKugel, halt. In der Projektverwaltung liegt alles in pas form vor. Von allem liegt eine dcu vor, außer von der DoppelRingKugel nicht, davon seh ich nur eine pas und eine Delphi Source File.


Aso, das muss man ja mal gesagt bekommen (DRK...). Ansonsten, da du die PAS Quellen hast, lösche mal die DCU Dateien von denen (also allen wo du die Pascal Quelle in dem Projekt drinne hast). Danachm nochmal das Projekt durchcompilieren.

Delphi Source File = *.pas
Delphi Compiled Unit = *.DCU <-- die erzeugt der Compiler beim übersetzen

MfG
Muetze1


Moony - So 15.05.05 01:28

also gut. ich habs gemacht und es geht weiter
Zitat:
[Fataler Fehler] mTKugel.pas(7): Überkreuzender Bezug zweier Units auf 'mTKugel'

Das ist der einzige Fehler den ich bekomme, wenn ich im Hauptprogramm ein wenig die Pfade geändert hab

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses
  mSuM,
  mTTisch in 'mTTisch.pas',
  mTKugel in 'mTKugel.pas',
  mTSpurKugel in 'mTSpurKugel.pas',
  mTDoppelRingKugel in 'mTDoppelRingKugel.pas';


sah vorher so aus

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses
  mSuM,
  mTTisch in '..\mTTisch.pas',
  mTKugel in '..\mTKugel.pas',
  mTSpurKugel in '..\mTSpurKugel.pas',
  mTDoppelRingKugel in '..\mTDoppelRingKugel.pas';

aber dann kommt
Zitat:
[Fataler Fehler] Billard.dpr(8): Datei nicht gefunden: 'mTKugel.dcu'


JayEff - So 15.05.05 01:33

Markiere mal die Zeile der Fehlermeldung, also das "fataler fehler: ...", und drücke dann F1. dann solltest du was herausfinden.


Moony - So 15.05.05 01:35

danke danke, was sind compiler?


Muetze1 - So 15.05.05 01:36

Moin!

user profile iconMoony hat folgendes geschrieben:
Zitat:
[Fataler Fehler] mTKugel.pas(7): Überkreuzender Bezug zweier Units auf 'mTKugel'


Bedeutet, das mTKugel.pas eine Unit in der Uses Liste hat, die wiederrum mTKugel in der Uses Liste hat. Somit müsstes du mal nachforschen, welche Unit in Zeile 7 von mTKugel.pas steht und ob diese wirklich direkt oben in der Uses Liste wieder mTKugel benutzen muss...

user profile iconMoony hat folgendes geschrieben:
sah vorher so aus

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses
  mSuM,
  mTTisch in '..\mTTisch.pas',
  mTKugel in '..\mTKugel.pas',
  mTSpurKugel in '..\mTSpurKugel.pas',
  mTDoppelRingKugel in '..\mTDoppelRingKugel.pas';

aber dann kommt
Zitat:
[Fataler Fehler] Billard.dpr(8): Datei nicht gefunden: 'mTKugel.dcu'


Mit anderen Worten: mTKugel.pas/mTKugel.dcu liegen nicht im Verzeichnis wo auch die EXE liegt...

user profile iconMoony hat folgendes geschrieben:
danke danke, was sind compiler?


Der Compiler ist ein Programm was aus deinen Quelltextzeilen binäre Anweisungen macht, die der Prozessor auch versteht und nachher das ganze auch ausführen kann. Die Reinform wie du sie im Quelltexteditor von Delphi siehst, können die Prozessoren nicht verstehen...

MfG
Muetze1


Moony - So 15.05.05 01:38

IN Zeile 7 steht keine Unit, nur ne Leerzeile und dann gehts mit Type weiter.
ich weiß. Ich hab in mTKugel unter uses mTSpurKugel und mTDoppelRingKugel (damit mTKugel weiß, dass es Unterklasse zu ihr gibt.
Gleichzeitig hab ich in mTSpurKugel und mTDoppelRingKugel mTKugel stehen (damit die beiden Unterklassen wissen, wer ihre Oberklasse ist)
Was soll ich denn jetzt streichen, dass in der Oberklasse? oder das in der Unterklasse?


JayEff - So 15.05.05 01:39

Der "Compiler" ist (ganz) grob gesagt der Teil von delphi, der deinen Code in Maschinensprache umsetzt und eine EXE draus macht.


Muetze1 - So 15.05.05 01:43

Moin!

user profile iconMoony hat folgendes geschrieben:
IN Zeile 7 steht keine Unit, nur ne Leerzeile und dann gehts mit Type weiter.
ich weiß. Ich hab in mTKugel unter uses mTSpurKugel und mTDoppelRingKugel (damit mTKugel weiß, dass es Unterklasse zu ihr gibt.
Gleichzeitig hab ich in mTSpurKugel und mTDoppelRingKugel mTKugel stehen (damit die beiden Unterklassen wissen, wer ihre Oberklasse ist)
Was soll ich denn jetzt streichen, dass in der Oberklasse? oder das in der Unterklasse?


Da haben wir das Problem: Delphi kann mTKugel nicht übersetzen, da mTKugel.pas auch u.a. mTSpurKugel.pas braucht - also die erst übersetzen - aber das klappt auch nicht, da mTSpurKugel.pas auch wieder mTKugel.pas braucht. Da beisst sich der Hund in den Schwanz. Daher entferne mal die Uses Einträge mTSpurKugel und mTDoppelRingKugel aus mTKugel.pas.

user profile iconJayEff hat folgendes geschrieben:
Der "Compiler" ist (ganz) grob gesagt der Teil von delphi, der deinen Code in Maschinensprache umsetzt und eine EXE draus macht.


Naja, das zusammensetzen macht der Linker... :roll:

MfG
Muetze1


Moony - So 15.05.05 01:49

AHHHHHHHHHH :rofl: :party: :dance2: :dance: :dunce: :rofl: ES FUNZT, es funzt ES FUNZT
*freu* Muetze du bissn Held!! Die Spurkugel tut zwar noch nicht das was sie soll, aber das zwing ich ihr noch auf *g*, aber die DoppelRingKugel hat brav einen Doppelring *Freu*. DANKESCHÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖN.


Moony - So 15.05.05 01:51

Habs. Die SpurKugel zieht brav eine Spur hinter sich her. *tätschelKugel*
NOCHMAL DANKE


JayEff - So 15.05.05 01:52

user profile iconMuetze1 hat folgendes geschrieben:

user profile iconJayEff hat folgendes geschrieben:
Der "Compiler" ist (ganz) grob gesagt der Teil von delphi, der deinen Code in Maschinensprache umsetzt und eine EXE draus macht.

Naja, das zusammensetzen macht der Linker... :roll:

Ich hab nix von "zusammensetzen" gesagt, und schau mal, was gehighlightet ist... :roll:


Muetze1 - So 15.05.05 01:52

Moin!

user profile iconMoony hat folgendes geschrieben:
ES FUNZT, es funzt


Na endlich - nun sag nochmal einer, in Foren kann man nicht "chatten" - so schnell wie die Beiträge hier geschrieben wurden...

user profile iconJayEff hat folgendes geschrieben:
Ich hab nix von "zusammensetzen" gesagt, und schau mal, was gehighlightet ist... :roll:


Ich wusste, das das kommt... Ich bezog mich auch eher auf das "EXE draus macht". Weil der Compiler hat mit der EXE nix zu tun, das macht der Linker...

Aber egal, grob gesagt ist ja alles richtig. Wenn wir aber den Linker als Baustein mit dazunehmen, dann ist er es...

MfG
Muetze1


Moony - So 15.05.05 01:54

Ach ich bin richtig glücklich. Das Proggi funzt und jetzt kann ich endlich meinen Spaß dran austoben. Blinkende Kugel, bunte Kugel, blümchen Kugeln (Hippi-Kugeln), Schäfchen Kugeln (mal schaun) und so weiter. Hach *freu*


Muetze1 - So 15.05.05 01:56

Moin!

user profile iconMoony hat folgendes geschrieben:
Ach ich bin richtig glücklich. Das Proggi funzt und jetzt kann ich endlich meinen Spaß dran austoben. Blinkende Kugel, bunte Kugel, blümchen Kugeln (Hippi-Kugeln), Schäfchen Kugeln (mal schaun) und so weiter. Hach *freu*


:shock: Dann fehlen eigentlich nur noch eine rosane und eine zum schminken... *duck*

MfG
Muetze1