AGB  ·  Datenschutz  ·  Impressum  







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

Variable Möglicherweise nicht Deklariert...

Ein Thema von Metschu · begonnen am 11. Nov 2023 · letzter Beitrag vom 13. Nov 2023
Antwort Antwort
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Variable Möglicherweise nicht Deklariert...

  Alt 11. Nov 2023, 14:21
Delphi-Version: 10.3 Rio
Hallo zusammen,

wie bekomme ich bei folgendem Quelltext die Warnungen unten ausgeblendet:

Delphi-Quellcode:
Case KomUnit.ModulTyp of
    1: Begin;
         usb := tUSB_Kom.Create;
         error := usb.connect;
       End;
    2: Begin;
         Fox := tFox_kom.Create;
         Error := Fox.connect;
       end;
end;

// ... Mache was mit dem gewählten Modul
// gebe nun das gewählte Modul wieder frei:

    case KomUnit.ModulTyp of
      1: begin;
          usb.disconnect; // < W1036 Variable 'USB' ist möglicherweise nicht initialisiert worden
          usb.Free;
         end;
      2: begin;
          Fox.disconnect; // < W1036 Variable 'fox' ist möglicherweise nicht initialisiert worden
          fox.Free;
         end;
    end;
Der Grund für die Warnung erscheint mir Logisch, da für Delphi ja nicht Sichergestellt ist, das die Variable Wirklich Initialisiert ist, von der Logik her jedoch schon, da der Modultyp währenddessen nicht verändert wird.

Bekomme ich die Warnung irgendwie weg?

Danke und Gruß

Torsten.
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#2

AW: Variable Möglicherweise nicht Deklariert...

  Alt 11. Nov 2023, 14:50
Ein usb := nil vor das erste case .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Variable Möglicherweise nicht Deklariert...

  Alt 11. Nov 2023, 15:49
Ein usb := nil vor das erste case .
Super, das hat geklappt.

Vielen Dank.
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Variable Möglicherweise nicht Deklariert...

  Alt 13. Nov 2023, 09:04
Bei mir gibts da immer(!) ein else mit einem raise einer Exception. Das sollte auch helfen (ungetestet)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Variable Möglicherweise nicht Deklariert...

  Alt 13. Nov 2023, 09:39
ja, ein Else stellt den abweichenden Pfad bereit
und das Raise unterbricht diesen Pfad, womit Nachfolgendes nicht mehr geprüft wird. (aber nur direkt Raise, nicht in einer Funktion verpackt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Variable Möglicherweise nicht Deklariert...

  Alt 13. Nov 2023, 09:59
Der Grund für die Warnung erscheint mir Logisch, da für Delphi ja nicht Sichergestellt ist, das die Variable Wirklich Initialisiert ist, von der Logik her jedoch schon, da der Modultyp währenddessen nicht verändert wird.

Bekomme ich die Warnung irgendwie weg?
Vielleicht am Einfachsten diesen Teil ...

// ... Mache was mit dem gewählten Modul

in eine Procecedure auslagern und dann die beiden Case-Statements zusammenfassen, so dass man dort jeweils nur das im Case-Zweig erzeugte Objekt freigibt.

Delphi-Quellcode:
case ... of
  bla: begin
    Var1 := Typ1.Create;
    try
      MachWasMit(Var1);
    finally
      Var1.Disconnect;
      Var2.Free;
    end;
  end;
  blub: begin
    Var2 := Typ2.Create;
    try
      MachWasMit(Var2);
    finally
      Var2.Disconnect;
      Var2.Free;
    end;
  end;
end;
Das setzt natürlich voraus, dass Typ1 und Typ2 einen gemeinsamen Vorfahren haben.
Wobei, wenn das der Fall ist, kann auch nur eine Variable von diesem gemeinsamen Typ verwenden und sich das zweite Case-Statement komplett schenken.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:57 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