![]() |
Procedure
Ich habe ein kleines Problem mit Proceduren ... Ich bekomme immer einnen Fehler:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFAnwendung = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; edtZahl1: TEdit; edtZahl2: TEdit; edtAdd: TEdit; edtMal: TEdit; btnRechnen: TButton; procedure btnRechnenClick(Sender: TObject); private procedure Addieren (Zahl1, Zahl2, Ergebnis : integer); public { Public-Deklarationen } end; var FAnwendung: TFAnwendung; implementation {$R *.dfm} procedure TFAnwendung.btnRechnenClick(Sender: TObject); var Zahl1 : integer; Zahl2 : integer; Ergebnis : integer; begin Zahl1 := StrToInt(edtZahl1.Text); Zahl2 := StrToInt(edtZahl2.Text); Addieren(Zahl1, Zahl2, Ergebnis); edtAdd.Text := IntToStr(Ergebnis); end; procedure TFAnwendung.Addieren (Zahl1, Zahl2, Ergebnis : integer); begin Ergebnis := Zahl1 + Zahl2; end; end. Fehler:
Delphi-Quellcode:
[Warnung] Unit1.pas(43): W1036 Variable 'Ergebnis' ist möglicherweise nicht initialisiert worden
[Hinweis] Unit1.pas(49): H2077 Auf 'Ergebnis' zugewiesener Wert wird niemals benutzt |
Re: Procedure
Zitat:
Den hinweis, indem du im onCreate event der form ergebnis:=0; machst ;) MfG - Ghost007 |
Re: Procedure
Oh, sry is schon spät. ^^
Die Rechnung stimmt nihct .. Es ist immer 0. |
Re: Procedure
Zitat:
Denn Ergebnis wird nur übergeben, bekommt aber den ückgabewert nicht zurück :warn: Statt OUT nönnteman hier zwar auch VAR nehmen, aber ersten ist braucht diese Variable kein Wert an die Prozedur übergeben zu werden (jedenfalls wird er intern nicht benötig)
Code:
Alternativ könntes du auch der Funktion entsprechend eine Funktion aus der Prozedur machen ... schließlich ist Ergebnis das Rechenergebnis von Addieren.
procedure TFAnwendung.btnRechnenClick(Sender: TObject);
... Addieren(Zahl1, Zahl2, Ergebnis); edtAdd.Text := IntToStr(Ergebnis); end; procedure TFAnwendung.Addieren (Zahl1, Zahl2 : integer; [b]Out[/b] Ergebnis : integer); begin Ergebnis := Zahl1 + Zahl2; end;
Code:
procedure TFAnwendung.btnRechnenClick(Sender: TObject);
... [b]Ergebnis := Addieren(Zahl1, Zahl2); [/b] edtAdd.Text := IntToStr(Ergebnis); end; [b]function TFAnwendung.Addieren (Zahl1, Zahl2 : integer) : integer; [/b] begin [b]Result := [/b]Zahl1 + Zahl2; end; Und die Meldungen sind doch eindeutig? Zitat:
Code:
Ergebnis wird von den verwendeten Funktionen nur als Eingabeparameter verwendet ... es wird also nirgendwo etwas zugewiesen.
AddieAddieren(Zahl1, Zahl2, [b]Ergebnis[/b]);
edtAdd.Text := IntToStr(Ergebnis); Zitat:
Code:
Ergebnis wird zwar was zugewiesen, aber nicht verwendet ... schließlich ist Ergebnis nicht als Ausgabeparameter definiert.
procedure TFAnwendung.Addieren (Zahl1, Zahl2, Ergebnis : integer);
begin [b]Ergebnis := [/b]Zahl1 + Zahl2; end; |
Re: Procedure
Das mit dem Out klappt nicht richtig ..
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFAnwendung = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; edtZahl1: TEdit; edtZahl2: TEdit; edtAdd: TEdit; edtMal: TEdit; btnRechnen: TButton; procedure btnRechnenClick(Sender: TObject); private procedure Addieren (Zahl1, Zahl2,Out Ergebnis : integer); public { Public-Deklarationen } end; var FAnwendung: TFAnwendung; implementation {$R *.dfm} procedure TFAnwendung.btnRechnenClick(Sender: TObject); var Zahl1 : integer; Zahl2 : integer; Ergebnis : integer; begin Zahl1 := StrToInt(edtZahl1.Text); Zahl2 := StrToInt(edtZahl2.Text); Addieren(Zahl1, Zahl2, Ergebnis); edtAdd.Text := IntToStr(Ergebnis); end; procedure TFAnwendung.Addieren (Zahl1, Zahl2,Out Ergebnis : integer); begin Ergebnis := Zahl1 + Zahl2; end; end.
Delphi-Quellcode:
[Fehler] Unit1.pas(22): E2067 Fehlender Parametertyp
[Fehler] Unit1.pas(43): E2035 Nicht genügend wirkliche Parameter [Fehler] Unit1.pas(47): E2067 Fehlender Parametertyp [Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden Nebenbei: Ich bin noch Anfänger, das sind meine Ersten Schritte. |
Re: Procedure
ok, ich hab das immer so gemacht, und meine proggis funktionieren auch, awa dann hab ich wohl was dazu gelernt ...
MfG - Ghost007 [EDIT] sorry .... :oops: [/EDIT] |
Re: Procedure
Was sollte dieser nutzlose Beitrag?
|
Re: Procedure
ups, mein Fehler :wall:
so sollte es gehn.
Delphi-Quellcode:
procedure TFAnwendung.Addieren (Zahl1, Zahl2 : integer; Out Ergebnis : integer);
Mir kam der Nick bekannt vor. :gruebel: Also dann ... herzlich Willkommen. Also wenn Anfänger, dann empfehle ich dir in diesem Fall die Variante mit der Funktion,
Delphi-Quellcode:
denn so ist auch beim Aufruf der Funktion zu erkennen welches der Rückgabewert ist.
function TFAnwendung.Addieren (Zahl1, Zahl2 : integer) : integer;
Delphi-Quellcode:
Hast ja selber bestimmt auch bemerkt, daß der Rückgabewert im Edit (edtAdd) nicht stimmt.
Ergebnis := Addieren(Zahl1, Zahl2);
Schließlich wurde bei dir das Rechenergebnis nicht in der Variable Ergebnis gespeichert, da dieses in der Funktion Addieren nur als Eingabeparameter definiert war. Und selbst wenn man dies als Ausgabeparameter definiert, kann man beim Aufruf nicht erkennen das sich da was geändert hat. (Eingabe- <> Ausgabe-Parameter) |
Re: Procedure
ICh hab nur noch nie mit functionen gearbeitet, deswegen weiß ich nicht was ich da verändern muss etc.
//EDIT: Das mit dem neuen Out klappt .. Aber was hat es mit "Out" auf sich? |
Re: Procedure
Eventuell solltest du dir erstmal die Grundlagn angucken. Eine gute Seite dafür sind die Tutorials auf
![]() [edit=Matze]Link korrigiert. Mfg, Matze[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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-2025 by Thomas Breitkreuz