Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit Object
flowstar - So 25.01.04 16:40
Titel: Problem mit Object
Hallo
Ich habe folgendes Problem:
Ich erstelle ein Object:
Delphi-Quelltext
1: 2: 3: 4: 5:
| type TGameButton = object X :0..1000; Y :0..1000; down : Boolean; end; |
Un dann habe ich eine Variable von diesem Object:
Nun will ich die Variable down ändern:
Nun kommt aber immer die Fehlermeldung:
"Left side cannot be assigned to"
Ich weiß nicht wo das Problem ist. Bitte helft mir
Danke
PS: Ich benutze Delphi 6
Moderiert von
Peter Lustig: Topic Verschoben
MaxiTB - So 25.01.04 17:51
Soviel ich weiß, sind class members standardmäßig private. Mache es richtiger, dann schauts so aus (mit Verwendung von properties):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TGameButton=object private: mX: integer; mY: integer; mDown: boolean;
public: property X: integer read mX write mX; property Y: integer read mY write mY; property Down: boolean read mDown write mDown; end; |
Besser ist natürlich noch, du verwendest eine Klasse (
class) da objects eigentlich gar nicht mehr verwendet werden sollen (Rückwärtskompatiblität).
Das würde analog dann so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TGameButton=class private: mX: integer; mY: integer; mDown: boolean;
public: property X: integer read mX write mX; property Y: integer read mY write mY; property Down: boolean read mDown write mDown; end; |
Besser noch, du fügst einen constructor hinzu, wo default werde initialisiert werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| type TGameButton=class private: mX: integer; mY: integer; mDown: boolean;
public: constructor Create();
property X: integer read mX write mX; property Y: integer read mY write mY; property Down: boolean read mDown write mDown; end;
constructor TGameButton.Create(); begin mX:=0; mY:=0; mDown:=false; end; |
Aber wie gesagt - der Fehler ist nur eine Zugriffsverletzung, weil standardmäßig members private sind.
MaxiTB - So 25.01.04 18:00
Moment ... alles nochmals zurück - ich hab schon wieder Pascal und C++ verwechselt. *g*
Nach ein bisserl nachstöbern würde ich schätzen, du mußt das object vorher explizit erstellen (Speicher reservieren). So oder so - ich empfehle dir meine Methode oben mit der Klasse trotzdem.
Aufruf dann:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var lButton: TGameButton; begin lButton:=TGameButton.Create(); lButton.Down:=true; FreeAndNil(lButton); end; |
flowstar - So 25.01.04 18:26
Ich dachte eigentlich, dass objects nicht erst erstellt werden müssen.
Aber daran liegts auch nicht.
Auch wenn ich vorher
Delphi-Quelltext
1:
| Gamebutton := TGamebutton.Create; |
aufrufe kommt immernoch der gleiche Fehler.
flowstar - So 25.01.04 18:36
ok
hab den fehler gefunden. So wie ichs oben beschieben hab funktionierts wunderbar.
Ich hatte den Button nur als Konstante statt Variable deklariert.
MaxiTB - So 25.01.04 18:36
objects haben keinen constructor soweit ich weiß !
Die müssen irgendwie mit new und dispose angelegt werden ... aber da bin ich nicht so fit in der Sache, weil wie gesagt eher schlecht ist, wenn man sich das angewöhnt :wink: ; mein Tip bleibt: Verwende lieber Klassen, sind moderner, können mehr und haben auch noch den Vorteil, daß Borland sie weiterhin noch unterstützt !
Edit:
*lol* Okay - das ist auch eine Sache mit dem const. Trotzdem solltest du objects nicht mehr verwenden :wink: .
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!