AGB  ·  Datenschutz  ·  Impressum  







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

Procedure

Ein Thema von Dr4ke · begonnen am 12. Mai 2007 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Dr4ke

Registriert seit: 12. Mai 2007
39 Beiträge
 
#1

Procedure

  Alt 12. Mai 2007, 01:13
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
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#2

Re: Procedure

  Alt 12. Mai 2007, 01:24
Zitat von Dr4ke:
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
Und wo genau liegt das problem? Das programm sollte trotzdem laufen, oder? die warnung bekommst du damit weg, das du das ergebnis mal ausgeben lässt, z.b. in ner label oder ähnliches.
Den hinweis, indem du im onCreate event der form ergebnis:=0; machst

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Dr4ke

Registriert seit: 12. Mai 2007
39 Beiträge
 
#3

Re: Procedure

  Alt 12. Mai 2007, 01:32
Oh, sry is schon spät. ^^

Die Rechnung stimmt nihct .. Es ist immer 0.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Procedure

  Alt 12. Mai 2007, 01:39
Zitat von ghost007:
Und wo genau liegt das problem? Das programm sollte trotzdem laufen, oder? die warnung bekommst du damit weg, das du das ergebnis mal ausgeben lässt, z.b. in ner label oder ähnliches.
Den hinweis, indem du im onCreate event der form ergebnis:=0; machst
komplett falsch ... damit bekommst du höchstens die Meldungen weg, aber nicht die tatsächliche Ursache.

Denn Ergebnis wird nur übergeben, bekommt aber den ückgabewert nicht zurück


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:
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;
Alternativ könntes du auch der Funktion entsprechend eine Funktion aus der Prozedur machen ... schließlich ist Ergebnis das Rechenergebnis von Addieren.
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:
[Warnung] Unit1.pas(43): W1036 Variable 'Ergebnis' ist möglicherweise nicht initialisiert worden
Code:
AddieAddieren(Zahl1, Zahl2, [b]Ergebnis[/b]);
edtAdd.Text := IntToStr(Ergebnis);
Ergebnis wird von den verwendeten Funktionen nur als Eingabeparameter verwendet ... es wird also nirgendwo etwas zugewiesen.

Zitat:
[Hinweis] Unit1.pas(49): H2077 Auf 'Ergebnis' zugewiesener Wert wird niemals benutzt
Code:
procedure TFAnwendung.Addieren (Zahl1, Zahl2, Ergebnis : integer);
begin
[b]Ergebnis := [/b]Zahl1 + Zahl2;
end;
Ergebnis wird zwar was zugewiesen, aber nicht verwendet ... schließlich ist Ergebnis nicht als Ausgabeparameter definiert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dr4ke

Registriert seit: 12. Mai 2007
39 Beiträge
 
#5

Re: Procedure

  Alt 12. Mai 2007, 01:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#6

Re: Procedure

  Alt 12. Mai 2007, 01:54
ok, ich hab das immer so gemacht, und meine proggis funktionieren auch, awa dann hab ich wohl was dazu gelernt ...

MfG - Ghost007

[EDIT]
sorry ....
[/EDIT]
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Procedure

  Alt 12. Mai 2007, 01:58
Was sollte dieser nutzlose Beitrag?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Procedure

  Alt 12. Mai 2007, 02:09
ups, mein Fehler

so sollte es gehn.
procedure TFAnwendung.Addieren (Zahl1, Zahl2 : integer; Out Ergebnis : integer);
Mir kam der Nick bekannt vor.
Also dann ... herzlich Willkommen.


Also wenn Anfänger, dann empfehle ich dir in diesem Fall die Variante mit der Funktion,
function TFAnwendung.Addieren (Zahl1, Zahl2 : integer) : integer; denn so ist auch beim Aufruf der Funktion zu erkennen welches der Rückgabewert ist.
Ergebnis := Addieren(Zahl1, Zahl2); Hast ja selber bestimmt auch bemerkt, daß der Rückgabewert im Edit (edtAdd) nicht stimmt.

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dr4ke

Registriert seit: 12. Mai 2007
39 Beiträge
 
#9

Re: Procedure

  Alt 12. Mai 2007, 02:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Procedure

  Alt 12. Mai 2007, 02:29
Eventuell solltest du dir erstmal die Grundlagn angucken. Eine gute Seite dafür sind die Tutorials auf http://www.dsdt.info


[edit=Matze]Link korrigiert. Mfg, Matze[/edit]
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 08:03 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