![]() |
VAR-Parameter als Pointer speichern und verändern
Hallo zusammen!
Ich übergebe dem "Create" einer Klasse eine Variable per VAR-Parameter, um innerhalb der Klasse deren Wert zu setzen. Beim VAR-Parameter wird doch nur der Pointer übergeben, richtig? Um mir diese Pointer-Adresse zu merken, speichere ich sie in einer internen Adresse der Klasse, also so:
Delphi-Quellcode:
Wenn ich jetzt an diese gespeicherte Adresse etwas innerhalb
Type
TTest = class private fPHasChanged: ^Boolean; [...] end; constructor TTest.Create(VAR aHasChanged: Boolean); begin { Adresse im internen Zeiger zwischenspeichern } fPHasChanged:= @aHasChanged; end; der Klasse speichern will, gibt es einen Zugriffsfehler.
Delphi-Quellcode:
Ich dachte, ich hätte den Pointer so richtig
Procedure TTest.DoSomething;
begin { Wert setzen, hier knallt's dann... } fPHasChanged^:= Boolean(false); { zum Test } If Boolean(fPHasChanged^) = true then ShowMessage('true') else ShowMessage('false'); end; dereferenziert (Das Dach hinter die Adresse) Was habe ich denn hier falsch gemacht? Dank und Gruß Pfoto |
Re: VAR-Parameter als Pointer speichern und verändern
Dann übergebe doch gleich den Pointer?
Bei einem Var-Parameter gehe ich davon aus, dass er modifiziert zurückkehrt, nicht, dass er _irgendwann_ später nochmal geändert werden könnte. |
Re: VAR-Parameter als Pointer speichern und verändern
Eine klasse wird immer per referenz übergeben ob Var, Const, ...
|
Re: VAR-Parameter als Pointer speichern und verändern
@mkinzler: hier wird aber keine Klasse übergeben.
ansonsten stimme ich Phoenix zu. Nimm gleich einen Pointer. Allerdings wird das nicht dein Problem lösen. Du übergibst vermutlich eine locale Variable welche später nicht mehr existiert. Desweiteren sind mir einige unschönheiten aufgefallen. Du vergleichst einen boolischen Wert auf True. True ist allerdings eine Konstante die den Wert 1 hat. Ein Boolean hingegen ist wahr sobald er ungleich 0 ist und nicht nur wenn er 1 ist. Also bei einem Vergleich nicht auf True testen. desweiteren brauchst du False nicht auf Boolean casten etc. Wie erzeugst du eigentlich deine Klasse. Vielleicht liegt ja dort der Fehler das du gar keine Instanz erzeugst. |
Re: VAR-Parameter als Pointer speichern und verändern
Zitat:
Zudem würde ich prinzipell wissen, ob ich mit den Pointern falsch umgehe... Zitat:
dieser Klasse soll ein Boolean per VAR übergeben werden. Sinn: Wenn die Klasse zerstört wurde, möchte ich durch die zuvor übergebene Bool-Variable auslesen können, ob sich etwas geändert hatte. Deswegen kann ich nicht mehr über eine öffentliche Property auf die Klasse zugreifen. |
Re: VAR-Parameter als Pointer speichern und verändern
du machst mit der Übergabe und dem Pointer nichts falsch. Allerdings verstehe ich nicht wo das Problem ist einfach
Delphi-Quellcode:
anstelle von
x = Klasse.Create(@boolvariable)
Delphi-Quellcode:
aufzurufen.
x = Klasse.Create(boolvariable)
Für dein eigentliches Problem würde ich auch lieber ein Event vorschlagen (ein OnDestroy) Das heißt, einfach im Destructor das Event auslösen und dann kannst du in dem Event noch drauf reagieren und noch fix properties auslesen etc. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz