AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Funktionen als Felder einer Klasse

Ein Thema von Benmik · begonnen am 13. Sep 2017 · letzter Beitrag vom 13. Sep 2017
Antwort Antwort
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Benmik

Registriert seit: 11. Apr 2009
161 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Funktionen als Felder einer Klasse

  Alt 13. Sep 2017, 16:43
Folgendes Szenario:
Delphi-Quellcode:
type
  TFunk = function(Wert:integer):string;

TIstwas = class(TObject)
  FZahlZuText:@TFunk;
end;

TMachwasListe = class(TObjectList<TIstwas>)
end;

procedure TuWas;
var Istwas:TIstwas;Text:string;
begin
  ...
  Istwas := TIstwas.Create;
  Istwas.FZahlZuText := @Funkt;
  MachwasListe.Add(Istwas);
  Text := MachwasListe[0].FZahlZuText(5);
end;

function Funkt(Wert:integer):string;
begin
  Result := IntToStr(Wert);
end;
Das funktioniert einfach nicht, weil der Parameter nicht an die Funktion weitergegeben wird. Ich habe alles Mögliche probiert, unter anderem "of object" (Methodenzeiger?). Der Parameter funktioniert nicht oder es gibt eine Zugriffsverletzung, wenn "Result" in der Funktion zugewiesen wird.
Was funktioniert, istprocedure Funkt(const Wert:integer;var Result:string , aber auch nur in der const/var Kombination. Ich bin mir sicher, dass den alten Hasen das alles klar ist, kann mir einer das mal erklären?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
390 Beiträge
 
#2

AW: Funktionen als Felder einer Klasse

  Alt 13. Sep 2017, 17:07
Lass mal die beiden "@" weg...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.216 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Funktionen als Felder einer Klasse

  Alt 13. Sep 2017, 17:31
Pointer-Typen werden nicht mit @ deklariert, sondern mit ^

Und
Zitat:
Delphi-Quellcode:
Istwas.FZahlZuText := @Funkt;

...

function Funkt(Wert:integer):string;
begin
  Result := IntToStr(Wert);
end;
Du kannst nur etwas verwenden, was "vor" der Verwendungsstelle bekannt ist.
Also function Funkt muß darüber oder es muß darüber wenigstens eine Forward-Deklaration dafür geben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
161 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Funktionen als Felder einer Klasse

  Alt 13. Sep 2017, 17:42
Jetzt funktioniert es natürlich. Vielen Dank euch beiden.
Warum funktioniert eigentlich die Prozedur mit dem var-Parameter?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf