AGB  ·  Datenschutz  ·  Impressum  







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

Rückgabewert von Function freigeben

Ein Thema von LoL · begonnen am 25. Feb 2005 · letzter Beitrag vom 28. Feb 2005
Antwort Antwort
Seite 3 von 3     123   
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#21

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 15:08
Eine Objektvariable ist aber bereits ein typisierter Zeiger!. Noch einmal mit einem Zeiger auf eine Objektvariable zu verweisen, ist schlicht Unsinn.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#22

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 11:35
also nochmal zurück ich habe das bisher immer noch nicht lösen könenen:
ich bräcuchte enventuell mal ne erklärung dazu:

Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function muh : TComponent;
begin
  result := nil;
  if b then
    result := c1
  else
    result := c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : TComponent;
begin
  b := true;

  cur := muh;

  if @c1 <> @cur then showmessage('ungleich');
end;
warum ist wenn ich den button drück c1 und cur ungleich?

soweit ich das verstanden habe ist c1 doch auch nichts anderes als ein zeiger auf eine adresse oder? und cur bekommt dann den zeiger zugewiesen. warum sind die addressen dann unterschiedlich?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#23

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 11:54
hmmm, versuch's mal so ... ich c1 un cur sind ja eingenständige Variablen, in denen die Pointer gespeichert werden, also haben @c1 und @cur auch immer unterschiedliche Adressen.

Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function muh : [color=#ff0000]Pointer[/color];
begin
  result := nil;
  if b then
    result := [color=#ff0000]@[/color]c1
  else
    result := [color=#ff0000]@[/color]c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : Pointer;
begin
  b := true;

  cur := muh;

  if @c1 <> cur then showmessage('ungleich');
end;
oder so
Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function muh : TComponent;
begin
  result := nil;
  if b then
    result := c1
  else
    result := c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : TComponent;
begin
  b := true;

  cur := muh;

  if c1 <> cur then showmessage('ungleich');
end;
$2B or not $2B
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#24

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 12:04
erstma danke für deine hilfe

folgendes zu deinem ersten beispiel die zeiger sind jetzt gleich(zumindest die addressen).
dann müsste doch logischer weise wenn ich
  cur := TComponent.Create(form1); auch c1 <> nil sein oder? ist es aber nicht! woran liegt das?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#25

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 12:14
nee, beim 1. sind das ja die Zeiger auf die Variable (glaub ich), und da c1 und c2 immer nur auf vie Variable zeigen, sollte es dann wohl so aussehn.
if cur^ <> nil then ...
$2B or not $2B
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#26

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 12:19
kann ich denn die funktion so schreiben das mit dem rückgabe wert der funktion(also eine komponente) so arbeiten kann als ob es die ursprünglich variable wäre?

Delphi-Quellcode:
cur = muh;
cur := TComponent.Create;
cur.Free;
//usw.
dabei soll aber immer c1 bzw c2 verändert werden?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#27

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 12:35
Klar, indem du es so machst, wie in deinem ersten Code,
Delphi-Quellcode:
function CurrentOL : TComponent;
begin
  if ... then result := EineKomponente
  else result := EineAndereKompoente;
end;
nur dann kannst du das ergebnis wiederum nicht direckt an ein andere Fumktion übergeben, welche einen Var-Parameter haben will (wie z.B. an FreeAndNil)
$2B or not $2B
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#28

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 12:48
ok

Delphi-Quellcode:
var c1,c2 : TComponent;
    b : boolean;

function CurrentOL : TComponent;
begin
  if b then result := c1
  else result := c2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cur : TComponent;
begin
  b := true;

  cur := CurrentOL;
  cur := TComponent.Create(form1);

  if c1 = nil then showmessage('nil');
end;
c1 ist aber hier nach immer noch nil! Woran kann das liegen?
  Mit Zitat antworten Zitat
PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#29

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 12:59
Hallo LoL,

es ist doch klar, dass c1 = NIL ist: Du weist c1 nirgendwo einen Wert zu oder übergibt es als VAR-Parameter an eine Prozedur. Woher sollte denn ein Wert kommen?
Dadurch, dass du über deine Funktion c1 an cur zuweist, kommt ja keine interne Kopplung zustande, die bei der Zuweisung an cur (via Create) auch auf c1 "durchschlägt".

Bis dann

Peter
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#30

Re: Rückgabewert von Function freigeben

  Alt 28. Feb 2005, 13:39
aber wie kann ich das dann regeln das ich den wert der funktion verändere oder ist das nicht möglich?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 17:48 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