AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Frage zu falscher Fehlermeldung bei for-schleifen
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu falscher Fehlermeldung bei for-schleifen

Ein Thema von gangs-taas · begonnen am 4. Aug 2009 · letzter Beitrag vom 5. Aug 2009
Antwort Antwort
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#1

Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 09:49
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 ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 09:51
Man darf Schleifenvariablen nicht verändern. Wird ein Parameter als Var übergeben wäre das prinzipiell möglich.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 09:53
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
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 09:56
In deinem Fall könntest du das var einfach weglassen
Markus Kinzler
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#5

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 09:58
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' ?!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 10:00
Wie ich oben geschrieben habe, wenn der übergebene Wert von der Funktion/Prozedur geändert werden können soll.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 4. Aug 2009, 10:13
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
Heiko
  Mit Zitat antworten Zitat
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#8

Re: Frage zu falscher Fehlermeldung bei for-schleifen

  Alt 5. Aug 2009, 09:41
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.
  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 23:22 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