AGB  ·  Datenschutz  ·  Impressum  







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

TList als Rückgabeparameter [erledigt]

Ein Thema von Moony · begonnen am 14. Aug 2008 · letzter Beitrag vom 14. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

TList als Rückgabeparameter [erledigt]

  Alt 14. Aug 2008, 10:06
Hallo zusammen,

ich möchte innerhalb einer Funktion ein paar werte in einer TList speichern. Am Ende der Funktion möchte ich die gefüllte Liste als Rückgabewert an den Result übergeben. Das mach ich folgendermaßen:

aufrufende Zeile:
Delphi-Quellcode:
// locale Variable vom Typ TList
TempList := SaveList();
die Funktion SaveList:
Delphi-Quellcode:
function TfmMain.SaveList: TList;
var Lst : TList;
begin
  Lst := TList.Create;
  try
    New(Pointer);
    try
      for i := 0 to Zähler - 1 do
      begin
        Pointer^.Variable := Fülle mit irgendwas
        ...
        Lst.Add(Pointer);
      end;
    except
      Dispose(Pointer);
    end;
  finally
    Result := Lst; // habs auch mit Result.Assign(Lst) versucht
    Lst.Free;
  end;
end;

Der Punkt ist, dass die Listeninhalte aus der Funktion nicht an die TempListe übergeben werden. Hoffe ihr könnt mir helfen.

Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:09
Du gibst einen Zeiger auf die Liste zurück und zerstörst diese anschliessend
Markus Kinzler
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:13
Ich will ja den kompletten Inhalt der Liste an die andere übergeben, sprich kopieren. Danach brauche ich dann diese Liste nicht mehr.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:13
Folgendes ist sinnvoller...

Delphi-Quellcode:
procedure TfmMain.SaveList(Lst: TList);
begin
  New(Pointer);
  try
    for i := 0 to Zähler - 1 do
    begin
      Pointer^.Variable := Fülle mit irgendwas
      ...
      Lst.Add(Pointer);
    end;
  except
    Dispose(Pointer);
  end;
end;

procedure TfmMain.Aufruf;
var List:TList;
begin
  List:=TList.Create;
  try
    SaveList(List);
  finally
    List.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:16
Ich würde den Parameter noch als const definieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:18
Hallo,

außerdem ist es etwas sinnlos, einen Pointer zu erstellen, ihn zuzuweisen und anschließend wieder freizugeben.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:19
Zitat:
Ich will ja den kompletten Inhalt der Liste an die andere übergeben, sprich kopieren. Danach brauche ich dann diese Liste nicht mehr.
Bei Klassentypen wird aber nicht der Inhalt, sondern eine Referenz zurückgegeben
Markus Kinzler
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:20
Das habe ich mir auch überlegt, aber so wie du die liste übergibst ist das doch nur callbyvalue. Das heißt ich übergebe den inhalt der liste an die funktion aber nicht die liste selbst. Dabei müßte ich doch ein callbyreference machen, oder nicht?
Hierbei muß aber die bezeichnung der variable identisch mit der übergabeliste sein. ich möchte diese funktion aber nutzen und mindestens mit zwei unterschiedlichen listen arbeiten.

Sprich mal
TempListe := SaveListe(); Und mal
MeineListe := SaveListe();
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:21
Objekt-Parameter werden automatisch ByReference übergeben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TList als Rückgabeparameter

  Alt 14. Aug 2008, 10:23
Dann übergebe doch die Zielliste wie schon geschrieben als Parameter.

SaveListe( TempListe);
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:36 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