Entwickler-Ecke
Sonstiges (Delphi) - Exception beim Versuch eine Variable zu ändern
hans mans - Fr 02.12.05 19:59
Titel: Exception beim Versuch eine Variable zu ändern
Hallo Leute!
Ich bin dabei eine Simulation einer Enigma mit Delphi zu schreiben. Ich habe mich dazu entschlossen das ganze Objektorientiert umzusetzen. Dabei ist jede Walze ein Objekte, das eine Variable "Position" besitzt, die anzeigt, in welche Position die Walze gedreht wurde. Die Unit mit der Klasse Walze sieht so aus:
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:
| Unit enigma;
Interface
Type TWalze = Class(TObject) Private zPosition : Byte; Public Constructor Init(pBuchstabe:Byte); Procedure setzeAuf(pBuchstabe:Byte); Function leseAus:Byte; Destructor Free; End;
Implementation
Constructor TWalze.Init(pBuchstabe:Byte); Begin zPosition := pBuchstabe End;
Procedure TWalze.setzeAuf(pBuchstabe:Byte); Begin self.zPosition := pBuchstabe End; Function TWalze.leseAus:Byte; Begin result := self.zPosition End;
Destructor TWalze.Free; Begin End;
End. |
Ich versuche nun von einer anderen Unit aus die Variable zPosition zu ändern. Dabei ruft das Programm eine Exception der Klasse EAccessViolation hervor, sobald es "setzeAuf" ausführt. Ich muss dazu noch sagen, dass das mein erster richtiger Versuch mit einer Klasse ist. Ist halt zum lernen gedacht. Kann mir bitte jemand sagen, was ich falsch mache?
I.MacLeod - Sa 03.12.05 12:38
Hast du vielleicht sowas wie hierdas gemacht?
Delphi-Quelltext
1: 2:
| walze.init(10); walze.setzeAuf(42); |
dann liegt der Fehler wahrscheinlich in der ersten Zeile (beim constructor bin ich mir nicht so ganz sicher)
Versuchs mal so:
Delphi-Quelltext
1: 2:
| walze := TWalze.Init(10); walze.setzeAuf(42); |
Und... der constructor heißt in der Regel "Create"
Cheers
Amateur - Sa 03.12.05 13:33
wie wäre es wenn du für deine klasse eine property machst die public ist. im moment hast du eine procedure und eine funktion die die feldvarible ändern.
das geht auch als read und write von einer property. wenn du nicht weisst wovon ich rede findest du eine sehr gute erklärung mit beispiel im
Crashkurs Delphi [
http://www.christian-stelzmann.de/artikel/crashkurs.htm].
ansonsten der constructor sollte create sein. der destructor ist destroy nicht free. free ruft destroy auf.
hast du in deinem programm auch alles ordentlich createt und gefreet?
ansonsten um zu wissen wo der fehler liegt: mach vier buttons und ruf in den entsprechenden onclicks eine der methoden auf. also im ersten create dann das setzen dann das auslesen und am ende free welches dann destroy aufruft. wenn die exception schon beim button mit create kommt initialisierst du was nicht richtig, kommt die bei den anderen methoden ist die feldvariable nicht richtig initialisiert und kommts bei free dann zerstörst du nicht richtig.
wenn es wirklich erst bei der set methode kommt dann haste was nicht richtig initialisiert. ich denk mal entweder liegts daran dass du init nicht create genommen hast. oder lass mal das zuweisen des wertes im constructor weg und setzt den wert als standartwert am anfang auf 0 oder so. dann weisst du mit der setmethode den wert zu...
wenn ich zeit hab teste ich mal deinen code und versuch es auszubessern aber geht grad nicht.... vielleicht findest du den fehler ja selbst...
hans mans - Sa 03.12.05 15:50
Danke, für die Tips. Das Problem war, dass ich den Construtor nicht richtig aufgerufen habe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!