Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Meldung: Var nicht initzialisiert obwohl wert zugewiesen?! (https://www.delphipraxis.net/103773-meldung-var-nicht-initzialisiert-obwohl-wert-zugewiesen.html)

f4k3 21. Nov 2007 15:37


Meldung: Var nicht initzialisiert obwohl wert zugewiesen?!
 
Nr. 1 - [Pascal Warnung] Unit1.pas(90): W1036 Variable 'res' ist möglicherweise nicht initialisiert worden

Delphi-Quellcode:
procedure TForm1.IstButtonClick(Sender: TObject);    // Ergebnis Berechnen

var res, op1, op2 : Double;
code             : Integer;
s                : string;

begin

    if mode = 2 then
    begin

          Val(strBuff1, op1, code);      // strBuff1 in Zahl op1 rückverwandeln
          Val(strBuff2, op2, code);      // strBuff2 in Zahl op2 rückverwandeln

          case op of

            '+': res := op1 + op2;
            '-': res := op1 - op2;
            '*': res := op1 * op2;
            '/': res := op1 / op2;
          end;

          s:= Format('%g',[res]);      // Ergebnis als Gleitkommazahl formatieren
          Label1.Caption := s;
          mode := 1;
          strBuff1 := '';

    end;



end;
Nr. 2 - [Pascal Warnung] Unit1.pas(143): W1036 Variable 'zei' ist möglicherweise nicht initialisiert worden

Delphi-Quellcode:
procedure TForm1.ZeiButtonClick(Sender: TObject);  // zeichenweise Zahleneingabe

var zei: Char;

begin

    if Sender = Button10  then zei := '0';
    if Sender = Button1   then zei := '1';
    if Sender = Button2   then zei := '2';
    if Sender = Button3   then zei := '3';
    if Sender = Button4   then zei := '4';
    if Sender = Button5   then zei := '5';
    if Sender = Button6   then zei := '6';
    if Sender = Button7   then zei := '7';
    if Sender = Button8   then zei := '8';
    if Sender = Button9   then zei := '9';
    if Sender = Button11  then zei := '.';


    if mode = 1 then
    begin
          strBuff1 := strBuff1 + zei;
          Label1.Caption := strBuff1;
    end

    else
    begin

          strBuff2 := strBuff2 + zei;
          Label1.Caption := strBuff1 + ' ' + op + ' ' + strBuff2;

    end;

end;


end.
Die Variablen wurden doch initzialisiert?! oder seh ich des falsch? Wertzuweisung = Initialisierung?!
Wenn jemand schlauer is, wovon ich sicherlich ausgehe ;) dann klärt mich mal bidde auf, steig da net dahinter woran des etz hapern soll ^^

f4k3 21. Nov 2007 15:39

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Hab vergessen den Buttons den Event-Handler zuzuweisen :coder2:

sry ...

DeddyH 21. Nov 2007 15:39

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Zitat:

Delphi-Quellcode:
case op of

    '+': res := op1 + op2;
    '-': res := op1 - op2;
    '*': res := op1 * op2;
    '/': res := op1 / op2;
end;

Und was, wenn op z.B. durch einen dummen Zufall 'A' ist? In diesem Fall ist res nicht initialisiert.

Aurelius 21. Nov 2007 15:42

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Bei Nummer 2 hast du doch
Delphi-Quellcode:
if Sender = Button1
bis
Delphi-Quellcode:
if Sender = Button11
.

Was wäre denn wenn Du als Sender Button12 hast? Dann würde res nichts zugewiesen werden und ist somit nicht initialisiert worden. Sprich: imm wenn eine variable nicht explizit initilisert wird (wenn es z.B. durch ein IF beschränkt ist) spuckt der Compiler eine Warnung aus.

@ DeddyH: Da ham wir es uns ja super aufgeteilt :stupid:

f4k3 21. Nov 2007 15:46

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:

Zitat von DeddyH
Zitat:

Delphi-Quellcode:
case op of

    '+': res := op1 + op2;
    '-': res := op1 - op2;
    '*': res := op1 * op2;
    '/': res := op1 / op2;
end;

Und was, wenn op z.B. durch einen dummen Zufall 'A' ist? In diesem Fall ist res nicht initialisiert.

res kann nicht zufällig 'A' sein. Es handelt sich hier um einen Taschenrechner, der über Buttons gesteuert wird.
ich kann des progi ja mal posten ^^

is nix besonderes ... nur mal bissl basics ausm Kochbuch nachmachen ... weil ich gewisse dinge versäumt hab :P

Muetze1 21. Nov 2007 15:51

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Zitat:

Zitat von f4k3
res kann zufällig 'A' sein.

Eher "op" kann "A" sein. Wenn dem so ist, dann wird "res" nicht initialisiert und enthält somit einen zufälligen Wert, da es eine lokale Variable ist.

Und zu den "if Sender = blubb then": Eine Frage: wenn der Sender nun Button1 ist, warum muss der Prozessor denn danach noch wie doof testen, ob es nicht trotzdem noch Button2 sein kann? Weil das kann dann eigentlich nicht sein - ausser du hast in allen Variablen die gleiche Instanz. Somit: else if verwenden und nicht das Programm unnötigt schwerfälliger zu machen...

hoika 21. Nov 2007 15:51

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Hallo,

es gibt nicht um Code.

Die Warnung sagt, dass du auf die Variable res zugreifst (nach dem Case),
obwohl sie nicht initialisiert sein könnte.

Abhilfe1:
else des case verwenden

Delphi-Quellcode:
case bla of
  bla1: ;
  bla2: ;
    else
      res:= 0.0;
end;
Abhilfe2:
vor dem case alle var auf sinnvolle Werte setzen

kein code ...


Heiko

f4k3 21. Nov 2007 15:56

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Das Problem ist doch bereits gelöst !!!

Die beiden Code-Schnipsel waren Events ...
diese Events werden ausgeführt wenn bei Nr.1 ein Ziffernbutton des Taschenrechners gedrückt wird
und bei Nr2 ein Operatorbutton des Taschenrechners gedrückt wird.

Ich hatte nur übersehen dass ich den Operatortasten noch nicht das Event OnOpButtonClick zugewiesen hatte.
Das war alles ... und es funktioniert auch ;) könnts ja selber testen.

f4k3 21. Nov 2007 15:57

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von f4k3
res kann zufällig 'A' sein.

Eher "op" kann "A" sein. Wenn dem so ist, dann wird "res" nicht initialisiert und enthält somit einen zufälligen Wert, da es eine lokale Variable ist.

Und zu den "if Sender = blubb then": Eine Frage: wenn der Sender nun Button1 ist, warum muss der Prozessor denn danach noch wie doof testen, ob es nicht trotzdem noch Button2 sein kann? Weil das kann dann eigentlich nicht sein - ausser du hast in allen Variablen die gleiche Instanz. Somit: else if verwenden und nicht das Programm unnötigt schwerfälliger zu machen...

excuse me ... es war gemeint res kann nicht zufällig 'A' sein :P
kleiner schönheitsfehler ... sry

RavenIV 21. Nov 2007 16:02

Re: Meldung: Var nicht initzialisiert obwohl wert zugewiesen
 
Zitat:

Zitat von f4k3
Die Variablen wurden doch initzialisiert?! oder seh ich des falsch? Wertzuweisung = Initialisierung?!
Wenn jemand schlauer is, wovon ich sicherlich ausgehe ;) dann klärt mich mal bidde auf, steig da net dahinter woran des etz hapern soll ^^

Die Variablen wurden eben nicht initialisiert.
Initialisieren heisst u.a., ihnen einen Initialwert (Startwert) zuweisen.
Du hast den Variablen zwar einen Wert zugewiesen, aber es kann Fälle geben, bei denen kein Wert zugewiesen wird.
Dann sind sie nicht initialiert.

Ich mache es immer so, dass ich in einer Funktion/Prozedur/Methode alle Variablen ganz am Anfang auf einen Startwert setze. String auf '', Integer und Real auf 0, Zeiger auf nil, usw.
Wenn der Compiler dann motzt, dass "Variable nicht benutzt", kann ich es immernoch rausnehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.
Seite 1 von 2  1 2      

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