Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frage zu falscher Fehlermeldung bei for-schleifen (https://www.delphipraxis.net/138140-frage-zu-falscher-fehlermeldung-bei-schleifen.html)

gangs-taas 4. Aug 2009 09:49


Frage zu falscher Fehlermeldung bei for-schleifen
 
Hey,
ich hab das heir geschrieben :

Delphi-Quellcode:
procedure TForm1.Scrollen;
var
I : Integer ;
  procedure MemoScrollbar(var MeNu: Integer);
  var
  Memo : TMemo;
  begin
    Memo := FindComponent('Memo' + IntToSTr(MeNu)) as TMemo;
    If (Memo.Lines.Count > 5) Then
      Memo.ScrollBars := ssVertical;
  end;
begin
  For i := 1 To 8 do
  MemoScrollbar(i);
end;
dann bekomme ich diese fehlermeldung : [Pascal Warnung] Unit1.pas(640): W1015 FOR-Schleifenvariable 'I' kann nicht als Var-Parameter weitergegeben werden

wieso bekomme ich die ? wo ist der fehler ?

und das was mic ham meisten wundert wieso funktioniert der code wenn ich 'ne fehlermeldung bekomme ?

also der code übergibt i als parameter das klappt einwandfrei aber wieso dann die fehlermeldung ?

mkinzler 4. Aug 2009 09:51

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
Man darf Schleifenvariablen nicht verändern. Wird ein Parameter als Var übergeben wäre das prinzipiell möglich.

hoika 4. Aug 2009 09:53

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
Hallo,

Zitat:

wieso funktioniert der code wenn ich 'ne fehlermeldung bekomme ?
Zitat:

[Pascal Warnung]
Es ist also eine Warnung, keine Fehlermeldung.

Behebung erfolgt, indem das var weggenommen wird,
oder ein const drausgemacht wird (ist aber nicht notwendig) .


Heiko

mkinzler 4. Aug 2009 09:56

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
In deinem Fall könntest du das var einfach weglassen

gangs-taas 4. Aug 2009 09:58

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
ah okay


wenn ich jetzt frage "wann kann man das weglassen und wann muss es dableiben" bekomme ich dann die antwort 'mach für jede frage nen neuen post auf' ?!

mkinzler 4. Aug 2009 10:00

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
Wie ich oben geschrieben habe, wenn der übergebene Wert von der Funktion/Prozedur geändert werden können soll.

hoika 4. Aug 2009 10:13

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
Hallo,
Delphi-Quellcode:
procedure foo_1(i: Integer);
begin
  i:= i+1;
end;

procedure foo_2(var i: Integer);
begin
  i:= i+1;
end;

var
  k: Integer;
begin
  k:= 1;
  foo_1(k);
  k ist immer noch 1

  foo_2(k);
  k ist 2

Deine Warnung besagt, dass obwohl du die Schleifenvariable
an eine "var Methode" übergeben hast,
sie nicht geändert werden kann.
Sie liegt fest in einem Register.

Falls du diese Variable also doch verändern würdest (wie in foo_2),
würde das nichts bringen.

Un um dir das endlose Gesuche zu ersparen,
erzeugt der Compiler die Warnung.


Heiko

Carsten1234 5. Aug 2009 09:41

Re: Frage zu falscher Fehlermeldung bei for-schleifen
 
Zitat:

Zitat von gangs-taas
wenn ich jetzt frage "wann kann man das weglassen und wann muss es dableiben" bekomme ich dann die antwort 'mach für jede frage nen neuen post auf' ?!

Wie bereits von anderen geschrieben dürfen Schleifenvariablen nicht woanders geändert werden.
Zu Deiner eigentlichen Frage:
Funktionen können nun mal nur einen Wert zurück lieferen. Nun kann es aber sein, dass Du weitere Infos zurück haben möchtest (einfaches Bsp.):

Delphi-Quellcode:
function CreateFile(AFileName: string; var IOResult: integer): boolean;
var FOut: System.Text;
begin
{$I-}
  System.AssignFile(FOut, AFileName);
  System.Rewrite(FOut);
{$I+}
  IOResult:= System.IOResult;
  Result:= IOResult = 0;
end;

procedure Test;
var IOResult: integer;
begin
  if not CreateFile('dummy.txt', IOResult) then
  begin
  {IOResult auswerten}
  end;
end;
Hier erhälst Du zurück, ob das Anlegen einer Datei geklappt hat und falls nicht, kannst Du noch IOResult auswerten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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