AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionen als Felder einer Klasse

Ein Thema von Benmik · begonnen am 13. Sep 2017 · letzter Beitrag vom 13. Sep 2017
Antwort Antwort
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#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
662 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
43.119 Beiträge
 
Delphi 12 Athens
 
#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.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#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
Antwort Antwort


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz