Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem bei Zugriff auf Eigenschaft eines Objektes
yogo - Mo 12.04.10 12:43
Titel: Problem bei Zugriff auf Eigenschaft eines Objektes
Hallo,
Ich wollte aus Jux ein Chatprogramm erstellen, mit dem Ziel, dass man damit irgendwann durch Firewalls hindurch Dateien verschicken kann. Weil es mir irgendwann zu doof wurde stets, wenn ich mein Protokoll geändert habe, den Quelltext aus dem Server in das Clientprojekt zu kopieren, oder umgekehrt, habe ich in einer seperaten Unit ein Klasse erstellt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type Botschaft = class gfhrlch: boolean; befehl: string; absender: string; empfaenger: string; nachricht: string; parameter: string; function MsgToStr: string; procedure CFromStr(eingabe: string); end; |
Dooferweise kommt nun eine Acces-Violation in 00404654 Read of add 00000008.
Die Addressen varieren, je nachdem in welcher Zeile ich eine Eigenschaft der Botschaft verändere.
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:
| procedure Botschaft.CFromStr(eingabe: string); var laeng, zhlr, i: integer; drinnen: boolean; begin {$O-} laeng := length(eingabe); drinnen := false; gfhrlch := false; i := 0; for zhlr := 1 to laeng do begin if drinnen = false then begin if eingabe[zhlr] = '"' then begin drinnen := true; i := i + 1; end; end else if ((eingabe[zhlr] = '"') and (eingabe[zhlr+1] = '|') and (eingabe[zhlr+2] = '#') and (eingabe[zhlr+3] = '+') and (eingabe[zhlr+4] = '|')) or (zhlr = laeng) then begin if (zhlr = laeng) and (eingabe[zhlr] <> '"') then gfhrlch := true; drinnen := false; end else case i of 1:befehl := befehl + eingabe[zhlr]; 2:absender := absender + eingabe[zhlr]; 3:empfaenger := empfaenger + eingabe[zhlr]; 4:nachricht := nachricht + eingabe[zhlr]; 5:parameter := parameter + eingabe[zhlr]; else gfhrlch := true; end; end;{$O-} end; |
Der Fehler tritt auf, egal ob ich das Handle des Objekts, in dem die Eigenschaft geändert werden soll(Der Aufruf "Botschaft.gfhrlch := true" kommt nicht am Parser vorbei: Method identifier expected) oder die Optimierung aus ist. Die Watch kann mir auch nicht weiterhelfen, das Objekt ist in einer anderen Form deklariert und die Klasse kann ich ja nicht auf die Watch setzen...
Wäre super, wenn mir jemand sagen könnte, warum das nicht geht oder wie es besser geht.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 12.04.2010 um 15:38
Tastaro - Mo 12.04.10 12:49
Ich tippe darauf, dass du keine Instanz der Klasse anlegst. Sprich irgendwas mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var Blablub: Botschaft; begin Blablub := Botschaft.create; Blablub. ... BlaBlub.free; end; |
Beste Grüße
yogo - Mo 12.04.10 12:58
Vielen dank! :D Du hast ins Schwarze getroffen. Ich hab schon Eltern, Lehrer und Bücher befragt ohne eine Lösung zu finden.
tmpmsg: Botschaft; hatte ich bedacht(andere Unit), aber Create und Free hab ich verschlafen.
Da hab ich gleich noch ne Frage im Anschluss: Ist es möglich im Konstruktor die Eigenschaften eines Objektes zu setzen?(Ich will mir das CFromStr sparen)
thepaine91 - Mo 12.04.10 13:12
Im Constructor ist alles möglich wenn ich dich jetzt richtig verstehe. ^^
Gausi - Mo 12.04.10 13:18
Hat zwar nicht direkt was mit dem Thema zu tun, aber es ist üblich, Klassennamen mit einem T vorne zu wählen, hier also TBotschaft. Ist zwar nur eine Kleinigkeit, erleichtert aber hinterher die Fehlersuche, da man dann sofort zwischen Klassennamen und Variable unterscheiden kann. :D
Zur Nachfrage: Du kannst einen Konstruktor mit Parametern schreiben, also ja.
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!