![]() |
Record als Result einer Funktion
Hallo,
wenn ich einen Record deklariere und diesen dann einer Funktion als Result zuordne, werden alle Werte innerhalb des Records auf True gesetzt. Warum, weiß ich nicht. Hier ein Beispiel:
Code:
Rufe ich die funktion nun auf, ist alles vom Result auch True.
type
TTest_Result = record Test_a : Boolean; Test_b : Boolean; Test_c : Boolean; end; function test(a:integer):TTest_Result; function test(a:integer):TTest_Result; begin Result.Test_a := True; end; Eine Zuweisung mittels Result.Test_b := False; z.B. innerhalb der function oder vorher aus dem Aufruf der function heraus, bringt auch nichts. Warum passiert das und wie behebe ich diesen Fehler? LG Mathias |
AW: Record als Result einer Funktion
Versuch mal so. Funktioniert bei mir wie gewünscht
Booleans sind, wenn sie vorher nicht initialisiert werden, immer auf True. Jedenfalls bei MIR unter 10.3.3.
Delphi-Quellcode:
function test: TTest_Result;
begin Result.Test_a := True; Result.Test_b := False; Result.Test_c := True; end; // was du in der Funktion test am Ende machst, bleibt dir überlassen procedure TForm1.Button2Click(Sender: TObject); var X: TTest_Result; begin X := test; showmessage( BoolToStr(X.Test_a, True)+sLineBreak+ BoolToStr(X.Test_b, True)+sLineBreak+ BoolToStr(X.Test_c, True) ); end; |
AW: Record als Result einer Funktion
Kann diesen Fehler nicht reproduzieren. Das Problem muss also wo anders liegen. Bei mir Funktioniert der von dir aufgeführte Code problemlos, und es wird
Delphi-Quellcode:
zurückgegeben.
(True, False, False).
|
AW: Record als Result einer Funktion
Zitat:
Zitat:
|
AW: Record als Result einer Funktion
Zitat:
Delphi-Quellcode:
. Außerdem werden initialisierte Variablen immer mit 0 beschrieben, so ist das auch in der aktuellen OH nachzulesen.
False
Habe gerade kein 10.3.3 zur Hand, wäre aber definitiv ein Bug, wenn es so wie von dir beschrieben sich verhält. |
AW: Record als Result einer Funktion
Da du den anderen Feldern von result keine Werte zuweist, ist deren Inhalt eher zufällig.
|
AW: Record als Result einer Funktion
Zitat:
Ich: 10.3.3. Vielleicht gibt es da Unterschiede oder einen Bug. Ich hatte immer alle auf True, obwohl ich persönlich eher False erwartet hätte. |
AW: Record als Result einer Funktion
Zitat:
|
AW: Record als Result einer Funktion
Um das abzukürzen und nicht 10 Seiten an Diskussionen zu erzeugen:
einfach alles initialisieren oder setzen. Dann gibt es auch kein Problem. Aber bevor wir hier nicht sehen wie test() aufgerufen wird, kann man eh nix sagen. |
AW: Record als Result einer Funktion
Zitat:
Ansonsten ist der Wert halt zufällig, und da alles außer 0 als
Delphi-Quellcode:
ausgewertet wird, erhältst du halt meistens das. Das wäre in dem Fall aber immer noch Zufall und nichts, auf das du dich verlassen kannst/solltest!
True
EDIT: (kleine Ergänzung): Automatisch initialisierte Variablen sind Strings, dynamische Arrays, Objektfelder und globale Variablen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz