Autor |
Beitrag |
xCyBeRx
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 14.03.11 10:45
Hallo
Ich habe aus Langeweile mal ein Programm geschrieben in dem man eine Kugel durch ein Tor steuern muss und dabei einer anderen Kugel ausweichen muss.
Nun habe ich das Problem, dass immer wenn ich eine Variable aus der Klasse TKugel aufrufen möchte ich einen Error bekomme und ich habe keine Ahnung woran das liegt.
Ich hänge einfach mal meinen Projektordner an und ich würde mich freuen wenn ihr mir helfen könnt
Nicht schimpfen wenn mal etwas schlecht geschrieben ist, weil ich Delphi erst seit einem halben Jahr in Informatik gabe.
(Wir benutzen da mSum,mListe,mUhr)
Edit: Die Namem Snake und TSchlange kommen übrigens daher das es ursprünglich mal Snake werden sollte aber mir dann doch zu kompliziert war 
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von xCyBeRx am Mo 14.03.11 10:49, insgesamt 1-mal bearbeitet
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 14.03.11 10:48
Ohne jetzt das Projekt angeschaut zu haben: wie lautet denn die Fehlermeldung? Das ist sehr wichtig.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
xCyBeRx 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 14.03.11 10:54
Exception EAccess in module Snake.exe at 000550C5.
Access violation at adress 004550C5 in module Snake.exe. Read of adress 00000000.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 14.03.11 10:59
Vermutlich hast Du keine Instanz Deiner Klasse erstellt.
Beispielhaft, wie so ein Fehler auftritt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var x : TKlasse; begin
x.WasAuchImmer := 0; x.Free
end; |
Hier fehlt vorher die Erstellung der Instanz. So wäre es richtig:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var x : TKlasse; begin
x := TKlasse.Create; x.WasAuchImmer := 0; x.Free
end; |
(ja, ich weiß, dass der Ressourcenschutzblock fehlt. es geht ums Prinzip)
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: xCyBeRx
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 14.03.11 11:00
Da anscheinend einiges User verlernt haben neue Mitglieder zu begrüßen (böser Blick Richtung Nersgatt  ) wünsch ich dir mal ein "Hallo und  im Delphi-Forum!"
Zu deinem Problem: Von welcher Klasse aus rufst du die Variable von TKugel schicken auf? Aus der Klasse TKugel selbst oder aus einer anderen Klasse? In welcher Zeile tritt der Fehler auf? Solche Dinge sind immer sehr hilfreich beim Fehler finden, da wir uns sonst wie in deinem Fall durch mehrere Unit wühlen müssen, was ja auch nicht gerade lustig ist.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Für diesen Beitrag haben gedankt: xCyBeRx
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 14.03.11 11:04
Hallo und  im Delphi-Forum! 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: xCyBeRx
|
|
xCyBeRx 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 14.03.11 11:05
Also genau genommen rufe ich in der Klasse TSchlange die Funktion GibYPos und GibXPos (aus TKugel) auf um den Abstand der HauptKugel und der Kugel, die man nicht berühren darf, zu berrechnen.
Der Fehler ist dann wieder weg wenn ich den Befehl berechneAbstand3 rausnehme.(Dann hat natürlich auch eine Kollision keine Wirkung.)
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 14.03.11 11:20
Mhm und die Kugel die in kenntKugel gespeichert ist wurde auch vorher korrekt erzeugt und vor dem ersten aufrufen der routine in kenntKugel gespeichert?
also mit
Delphi-Quelltext 1: 2:
| NeueKugel := TKugel.Create(); Schlange.lerneKugelKennen(NeueKugel); |
Beide Teile sind wichtig und sollten erfolgt sein bevor das erste Mal Schlange.berechneAbstand3() aufgerufen wird. Ansonsten zeigt kenntKugel auf einen "leeren" Speicherplatz und in Delphi fliegen die Fetzen das sich die Schlange am liebsten verkriechen würde.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Für diesen Beitrag haben gedankt: xCyBeRx
|
|
OlafSt
      
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Mo 14.03.11 11:23
So ein Fehler ist zu 99,99995652% ein nicht initialisiertes Objekt, auf das dann zugegriffen wird. Allerspätestens, wenn man liest "Read of address 00000000" ist es sonnenklar.
In deinem Fall ist es offensichtlich: kenntTor.GibX löst eine solche Schutzverletzung aus, ergo ist kenntTor nicht initialisiert. Schaut man sich in deinem Code etwas um, dann sieht man:
- kenntTor ist vom Typ TTor
- kenntTor.Create wird NICHT in TSnake.pas aufgerufen
- die Routine lerneTorkennen wird nie aufgerufen. Im ganzen Programm nicht.
Da liegt dein Problem.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 14.03.11 11:27
OlafSt hat folgendes geschrieben : | So ein Fehler ist zu 99,99995652% ein nicht initialisiertes Objekt, auf das dann zugegriffen wird. Allerspätestens, wenn man liest "Read of address 00000000" ist es sonnenklar.
In deinem Fall ist es offensichtlich: kenntTor.GibX löst eine solche Schutzverletzung aus, ergo ist kenntTor nicht initialisiert. Schaut man sich in deinem Code etwas um, dann sieht man:
- kenntTor ist vom Typ TTor
- kenntTor.Create wird NICHT in TSnake.pas aufgerufen
- die Routine lerneTorkennen wird nie aufgerufen. Im ganzen Programm nicht.
Da liegt dein Problem. |
StringReplace(QuotedText, "Tor", "Kugel", [rfReplaceAll, rfIgnoreCase]);
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
xCyBeRx 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 14.03.11 11:33
OlafSt hat folgendes geschrieben : | So ein Fehler ist zu 99,99995652% ein nicht initialisiertes Objekt, auf das dann zugegriffen wird. Allerspätestens, wenn man liest "Read of address 00000000" ist es sonnenklar.
In deinem Fall ist es offensichtlich: kenntTor.GibX löst eine solche Schutzverletzung aus, ergo ist kenntTor nicht initialisiert. Schaut man sich in deinem Code etwas um, dann sieht man:
- kenntTor ist vom Typ TTor
- kenntTor.Create wird NICHT in TSnake.pas aufgerufen
- die Routine lerneTorkennen wird nie aufgerufen. Im ganzen Programm nicht.
Da liegt dein Problem. |
Ehm mit dem Tor habe ich aber überhaupt kein Problem? Damit funktioniert alles super! -.-
Und dickes Danke an elundril ich hab den Fehler gefunden der Befehl Schlange.lerneKugelkennen fehlte  jetzt funktionierts!! DAAAAANKE 
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 14.03.11 11:40
Kein Problem.
Zu OlafSt verteidigung: Er hat vermutlich das gleiche gemeint wie ich und hat sich einfach nur beim Variablen und Methodennamen vertan. Ist mir auch passiert, aber ich habs halt bemerkt bevor ich meinen Post abgeschickt hab. 
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
xCyBeRx 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 14.03.11 11:49
Eine Frage hab ich noch
Ich habe in TSchlange dei VAriavle Score. Kann ich die irgendwie während des Spiels anzeigen lassen?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 14.03.11 11:53
Bitte erstell für jede Frage einen neuen Thread. Das erhöht die Übersichtlichkeit der Diskussion und entspricht auch den Forenregeln.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|